php文件上传需同步调整upload_max_filesize、post_max_size和memory_limit三个参数,且必须重启web服务并验证生效;还需检查max_file_uploads、超时设置及web服务器层限制。

直接改 upload_max_filesize 通常不行,PHP 文件上传受多个参数协同控制,必须一起调、一起生效。
必须同步修改的三个核心参数
单个文件大小、整个 POST 数据量、脚本可用内存三者缺一不可:
-
upload_max_filesize:控制单个文件最大允许体积,例如
upload_max_filesize = 128M -
post_max_size:必须 ≥
upload_max_filesize,建议多留 2–10M 余量(用于表单字段和 HTTP 头),例如post_max_size = 136M -
memory_limit:应 ≥
post_max_size的 1.5 倍,尤其做图像处理或内容校验时内存消耗大,例如memory_limit = 256M
确认并修改正确的 php.ini 文件
别乱改错配置文件。先创建一个 info.php,内容为 <?php phpinfo(); ?>,用浏览器访问它,搜索 “Loaded Configuration File” —— 那行显示的路径才是真实生效的 php.ini。
找到该文件后:
- 用文本编辑器打开,搜索上述三项参数,按需修改
- 单位只认
K、M、G(大小写敏感),不能加引号,不能写MB或mb - 改完保存,**必须重启 Web 服务**:Apache 执行
sudo systemctl restart apache2;Nginx + PHP-FPM 则需sudo systemctl restart php8.1-fpm和sudo systemctl reload nginx
其他可能影响上传的配置项
这些不是上传失败的主因,但常被忽略,导致改完仍不生效:
-
max_file_uploads:默认最多一次上传 20 个文件,如需批量上传更多,可设为
max_file_uploads = 50 -
max_execution_time 和 max_input_time:大文件上传耗时长,建议设为
300(单位秒)以上 -
Web 服务器层限制:Nginx 还要检查
client_max_body_size,Apache 要看LimitRequestBody,它们也必须 ≥post_max_size
验证是否真正生效
重启后再次访问 info.php,搜索 upload_max_filesize、post_max_size 和 memory_limit,确认数值已更新。再在上传脚本开头加:
var_dump($_FILES); die();
上传一个略超原限制的文件,观察 error 字段:
值为 1 表示仍被 ini 限制拦截;值为 2 是前端 MAX_FILE_SIZE 隐藏字段限制;值为 0 才说明通过了服务端大小校验。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











