PHP使用move_uploaded_file上传文件提示权限拒绝无法保存怎么解决
问题根因
报错信息里的Permission denied明确指向:Web服务器运行PHP的进程没有目标存储目录img/的写入权限,你的前端表单、核心上传逻辑本身没有问题。
解决步骤
- 先确认目标目录存在且路径正确
你代码中使用了相对路径img/,需要确保该目录和create_new_article.php处于同一层级。如果目录不存在,可以在上传逻辑前先执行目录创建:$target_dir = "img/"; // 新增目录判断创建逻辑 if (!file_exists($target_dir)) { mkdir($target_dir, 0755, true); } - 修改
img目录的写入权限
如果你使用的是Linux服务器,通过SSH进入站点根目录/home/kloucto2/www/后执行以下命令:
首先尝试给目录设置通用可写权限,测试是否是权限导致的问题:chmod -R 755 img/
如果755权限依旧报错,可以先临时设置777权限验证问题根因,正式环境不建议使用777权限,建议找到PHP运行的进程用户(通常是www-data、apache、nginx等),将目录所有者修改为对应的进程用户:chown -R 运行PHP的用户名:用户组 img/
代码优化建议
- 不要直接使用用户上传的原始文件名作为存储文件名,容易出现重名文件覆盖的问题,建议拼接唯一标识:
$filename = uniqid() . '_' . $path['filename']; - 添加上传文件校验逻辑,避免恶意文件上传风险,比如你要上传缩略图,可以限制仅允许图片格式:
$allow_ext = ['jpg', 'jpeg', 'png', 'gif']; if (!in_array(strtolower($ext), $allow_ext)) { die('仅允许上传jpg、png、gif格式的图片'); }
内容的提问来源于stack exchange,提问作者ToklCz
相关产品推荐
相关产品推荐

