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

Windows8.1 XAMPP环境PHP上传文件报Permission denied错误求解

问题根因

  • 代码层面存在2个直接错误:
    1. move_uploaded_file方法的第二个参数末尾多了多余空格,会被系统识别为名称带空格的不存在目录,触发路径不合法错误
    2. 仅指定了目标存储目录,没有拼接上传后的文件名,系统无法确定临时文件的存储名称
  • 若修复代码后仍报错,需确认目录权限配置是否真的生效

修复方案

第一步:修正上传代码

替换原有move_uploaded_file行代码即可:

// 去掉路径末尾的空格,同时拼接原始文件名作为存储名称
move_uploaded_file($post_image_temp, "../images/" . $post_image);

如果仍存在相对路径识别异常,建议改用绝对路径,适配Windows XAMPP环境的写法如下:

// 拼接网站根目录生成绝对路径,避免相对路径随脚本执行目录变化失效
$target_path = $_SERVER['DOCUMENT_ROOT'] . '/CMS/CMS_TEMPLATE/images/' . $post_image;
move_uploaded_file($post_image_temp, $target_path);

第二步:校验目录权限(若代码修复后仍报错)

  1. 右键点击images文件夹,选择「属性」→「安全」,给Everyone或者XAMPP运行的Authenticated Users用户组开放「写入」「修改」权限
  2. 确认文件夹的「只读」属性已取消,点击「应用」后重启XAMPP的Apache服务生效
  3. 可以用测试脚本验证目录可写性:
<?php
$test_file = "../images/write_test.tmp";
$write_status = file_put_contents($test_file, "权限校验");
if($write_status){
    echo "目录可写,权限配置正常";
    unlink($test_file);
}else{
    echo "目录不可写,请重新检查权限配置";
}

额外优化建议

为避免后续业务异常,可以补充2个逻辑:

  • 上传前判断目标目录是否存在,不存在自动创建:
if(!is_dir("../images")){
    mkdir("../images", 0777, true);
}
  • 对上传文件名做重命名,避免同名文件覆盖:
// 给文件名加唯一前缀,防止覆盖
$post_image = uniqid() . "_" . $_FILES['post_image']['name'];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:21:01