服务器迁移后无法上传文件:疑似权限问题
问题排查与解决方案
针对你迁移服务器后文件无法上传的问题,结合给出的配置和代码,以下是具体排查和修复步骤:
1. 修复表单核心缺失属性
你的上传表单未添加enctype="multipart/form-data",这是文件上传的强制要求——没有该属性,服务器无法解析文件流,仅能接收文本字段。修改后的表单代码:
<form action="upload.php" method="post" class="upload-form" enctype="multipart/form-data"> <div class="file-input"> <input class="pop" id="file" multiple name="file[]" type="file"> <input class="tit" name="title" placeholder="Title" type="text"> <textarea cols="50" name="story" placeholder="Story" rows="4"></textarea> </div> </form>
2. 调整PHP请求大小限制
你的php.ini中post_max_size = 8M,远小于upload_max_filesize = 2000M——post_max_size限制整个POST请求的总大小,必须大于或等于单文件上传限制,否则大文件会被直接拦截。修改php.ini:
post_max_size = 2000M
修改后重启Apache生效:
sudo systemctl restart apache2
3. 验证目录权限的实际有效性
虽然test_upload/权限为drwxrwxrwx www-data www-data,仍需确认:
- Apache运行用户是否为
www-data:执行ps aux | grep apache查看进程所属用户 - 代码创建子文件夹时是否设置了正确权限:比如使用
mkdir()时需指定权限参数,确保子目录创建后www-data有读写权限,示例:mkdir($new_folder, 0755, true);
4. 通过错误日志定位具体问题
直接查看日志获取精准报错信息:
- Apache错误日志:通常路径为
/var/log/apache2/error.log - 实时查看日志命令:
tail -f /var/log/apache2/error.log
尝试上传文件后,日志会显示具体问题(如临时目录权限不足、文件路径错误等)
5. 用极简脚本验证基础上传功能
编写最小化测试脚本,排除业务代码干扰:test_upload.php:
<?php var_dump($_FILES); var_dump($_POST); ?>
对应测试表单test_form.html:
<form action="test_upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="test_file"> <input type="text" name="test_title"> <button type="submit">上传</button> </form>
若测试脚本能正常获取$_FILES数据,说明问题出在业务代码的子目录创建逻辑;若仍无数据,继续排查环境配置。
内容的提问来源于stack exchange,提问作者jhon brod
相关产品推荐
相关产品推荐

