You need to enable JavaScript to run this app. 自定义代码向WordPress上传图片失败 目录可写无报错求助
优惠活动
大模型
产品
解决方案
定价
更多

自定义代码向WordPress上传图片失败 目录可写无报错求助

问题排查与修复方案

现有代码的核心问题

  • 变量大小写不匹配:代码中定义的文件名变量是$fileName(驼峰命名),但获取文件类型时错误使用了未定义的小写变量$filename,PHP大小写敏感,此处会导致文件类型读取失败,同时抛出未定义变量的警告(看不到报错大概率是关闭了PHP错误提示)。
  • 目录可写性判断逻辑错误:判断可写性时使用了未定义的变量$upload_path,此处应该判断的是目标存储目录$uploads['basedir'].'/contracts/'的可写权限;同时当前逻辑仅输出不可写提示,没有终止后续上传逻辑,就算目录不可写仍会执行移动文件操作。
  • 缺少上传错误校验:没有判断$_FILES['upload_img']['error']的状态,若上传过程中出现文件过大、表单异常等问题,临时文件路径不存在,移动操作必然失败。
  • 缺少异常分支的输出提示:文件后缀不匹配、移动文件失败的场景都没有任何输出,会误认为没有报错。

修复后的完整代码

// 调试阶段可开启错误提示,上线后删除即可
error_reporting(E_ALL);
ini_set('display_errors', 1);

$uploads = wp_get_upload_dir();
// 先校验上传是否存在系统级错误
if ($_FILES['upload_img']['error'] !== UPLOAD_ERR_OK) {
    echo '上传失败,错误码:' . $_FILES['upload_img']['error'];
    exit;
}

$fileTmpPath = $_FILES['upload_img']['tmp_name'];
$fileName = $_FILES['upload_img']['name'];
$fileSize = $_FILES['upload_img']['size'];
// 修复变量大小写错误
$fileType = $_FILES['upload_img']['type'];
$fileNameCmps = explode(".", $fileName);
$fileExtension = strtolower(end($fileNameCmps));
$allowedfileExtensions = array('jpg', 'gif', 'png');

if (!in_array($fileExtension, $allowedfileExtensions)) {
    echo '不支持的文件格式,仅允许jpg、gif、png';
    exit;
}

$newFileName = md5(time() . $fileName) . '.' . $fileExtension;
$target_dir = $uploads['basedir'] . '/contracts/';
$dest_path = $target_dir . $newFileName;

// 修复可写性判断的变量错误,判断失败直接终止流程
if (!is_writeable($target_dir)) {
    echo 'Unable to write to directory.';
    exit;
}

if(move_uploaded_file($fileTmpPath, $dest_path)){
    echo $uploads['baseurl'] . '/contracts/' . $newFileName;
} else {
    echo '文件移动失败,请检查临时目录权限或目标目录权限';
}

额外排查建议

  • 确认WordPress后台设置的上传目录路径是否和wp_get_upload_dir()返回的basedir一致,避免路径配置错误导致找不到目录。
  • 检查contracts目录的权限是否为755或775,同时确认目录的所属用户和PHP运行用户一致,避免权限设置正确但所属用户不对导致无法写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 22:15:01