Yii1.1.32上传失败“权限不足”是因Web服务器用户(如www-data或nginx)对uploadPath目录无写权限,需用chown修正归属,并检查PHP的upload_max_filesize、post_max_size及upload_tmp_dir配置是否合理且路径可写。

Yii1.1.32项目部署后上传文件失败,提示“权限不足”,说明Web服务器进程(如nginx或Apache)对上传目录没有写入权限,无法创建临时文件或保存目标文件。
确认上传目录路径与归属
打开 【protected/config/main.php】,查找 'uploadPath' => 'path/to/uploads' 或类似配置项(也可能在 runtime 下的 uploads 子目录),记下实际物理路径,例如 /var/www/myapp/protected/runtime/uploads。
执行 ls -ld /var/www/myapp/protected/runtime/uploads,确认目录所有者是否为 Web 服务器运行用户(常见为 www-data、nginx 或 apache);若显示 root root 或其他非Web用户,则权限不匹配。
修正目录所有权与权限
方法一:直接赋权给Web用户(推荐)
执行 sudo chown -R www-data:www-data /var/www/myapp/protected/runtime/uploads(Ubuntu/Debian)或 sudo chown -R nginx:nginx /var/www/myapp/protected/runtime/uploads(CentOS/RHEL)。
方法二:放宽组写权限(仅限开发测试环境)
执行 sudo chmod -R g+w /var/www/myapp/protected/runtime/uploads,再确保Web服务器进程属于该目录所在组(如 www-data),否则无效。
【注意:不要对整个 protected/ 目录递归 chmod 777,这会严重破坏 Yii 安全机制】
检查PHP上传相关配置
第一步:确认 upload_max_filesize 和 post_max_size 是否足够。
编辑 /etc/php/*/fpm/php.ini(FPM模式)或 /etc/php/*/apache2/php.ini(Apache模块),将两者设为一致且大于预期上传文件,例如:upload_max_filesize = 8Mpost_max_size = 8M
第二步:验证 upload_tmp_dir 是否可写。
执行 php -i | grep upload_tmp_dir 查出路径(如 /tmp),再运行 ls -ld /tmp 确认其权限为 drwxrwxrwt(末位 t 表示 sticky bit 正常)。若自定义了该值(如指向 /var/www/myapp/tmp),必须同步赋予Web用户写权限。
第三步:重启PHP服务使配置生效。
Ubuntu/Debian:sudo systemctl restart php*-fpm;CentOS:sudo systemctl restart php-fpm。
验证Yii上传组件行为
在控制器中检查是否调用了 CUploadedFile::getInstance() 后未做 moveTo(),或 moveTo() 的目标路径写错——比如漏掉 realpath() 解析,导致路径拼接错误,最终尝试写入根目录或只读目录。
临时加一行日志:error_log('Upload target: '. $targetPath);,查看实际写入路径是否落在已授权目录内。
若使用 CFileValidator,确认其 types 和 maxSize 未误设为0或极小值,导致前端看似成功但后端静默拒绝。


















