You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TinyMCE上传图片时遭遇HTTP Error 403问题求助

解决TinyMCE图片上传403 HTTP Error问题

你遇到的403错误确实大概率和PHP代码里的$accepted_origins配置有关,咱们一步步排查和修复:

1. 确认请求Origin是否匹配允许列表

浏览器发起跨域请求时会携带Origin请求头,你的PHP代码会检查这个值是否在$accepted_origins数组里,不匹配就会返回403。这里常见的问题有:

  • 本地开发用的是http://localhost而非https://localhost(很多本地环境默认不启用HTTPS)
  • 本地开发带了端口号(比如http://localhost:8080),但你配置的列表里没加端口
  • 线上服务器的Origin地址写错(比如少了www、协议不对)

修复方案:
修改$accepted_origins数组,加入实际的请求源。比如本地开发场景可以改成:

$accepted_origins = array(
    "http://localhost",
    "http://localhost:8080", // 如果有端口的话加上
    "https://77.104.172.194"
);

2. 处理同域请求的情况

如果你的TinyMCE页面和上传接口是同域名的,浏览器不会发送HTTP_ORIGIN头,这时候你的代码会跳过Origin校验逻辑,但可能导致权限判断遗漏。可以补充同域请求的允许逻辑:

修改PHP里的Origin校验部分:

$accepted_origins = array("http://localhost", "https://77.104.172.194");
$imageFolder = "pictures/Test/";

reset ($_FILES);
$temp = current($_FILES);

// 新增:处理同域请求(无HTTP_ORIGIN的情况)
$isSameOrigin = !isset($_SERVER['HTTP_ORIGIN']);
$isAllowedOrigin = $isSameOrigin || (isset($_SERVER['HTTP_ORIGIN']) && in_array($_SERVER['HTTP_ORIGIN'], $accepted_origins));

if (!$isAllowedOrigin) {
    header("HTTP/1.1 403 Forbidden");
    exit;
}

// 允许跨域的话设置响应头
if (isset($_SERVER['HTTP_ORIGIN'])) {
    header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
}

if (is_uploaded_file($temp['tmp_name'])){
    // 后续的文件处理逻辑...
}

3. 检查上传目录的权限

除了Origin问题,403错误也可能是服务器没有写入权限到pictures/Test/目录。你需要:

  • 确认pictures/Test/目录存在,不存在的话手动创建
  • 给目录设置合适的权限(比如Linux下设置chmod 755 pictures/Test/,确保服务器进程有读写权限)

补充:前端代码确认

你的前端TinyMCE初始化代码看起来没问题,但可以确认xhr.withCredentials = false是否符合你的场景——如果你的接口需要携带Cookie,这个值要改成true,不过大部分图片上传场景不需要。

内容的提问来源于stack exchange,提问作者Zengi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:54:13