php 8.5上传“文件过大”需同步调大upload_max_filesize、post_max_size、memory_limit、max_execution_time四参数,确认php.ini路径后重启php8.5-fpm;nginx需设client_max_body_size≥post_max_size并重载;upload_tmp_dir须存在且www-data可写。

PHP 8.5上传文件提示“文件过大”,不是版本问题,而是上传链路上多个环节的限制共同作用的结果。核心在于:PHP本身、Web服务器(Nginx/Apache)、临时目录权限三者必须全部打通,缺一不可。
确认当前生效的限制值
先别改配置,用最简单的方式看清真实瓶颈:
- 新建一个 info.php 文件,内容为
<?php phpinfo(); ?> - 通过浏览器访问它,在页面中搜索 upload_max_filesize、post_max_size、memory_limit、max_execution_time 和 Loaded Configuration File
- 重点核对 “Loaded Configuration File” 路径——你后续修改的必须是这个文件,而不是其他位置的 php.ini 副本
同步修改 PHP 8.5 的四个关键参数
打开上一步确认的 php.ini 文件,找到并修改以下四行(单位支持 M 或 G,**不要加引号**):
- upload_max_filesize = 128M —— 单个文件最大允许大小
- post_max_size = 132M —— 整个 POST 请求上限(需略大于 upload_max_filesize,预留表单字段空间)
- memory_limit = 256M —— 必须 ≥ post_max_size,建议设为 1.5–2 倍
- max_execution_time = 600 和 max_input_time = 600 —— 大文件上传和解析耗时长,避免超时中断
保存后,**必须重启 PHP-FPM 服务**(例如:sudo systemctl restart php8.5-fpm),仅 reload 不生效。
检查并调整 Nginx 或 Apache 的拦截层
PHP 配置再大,如果 Web 服务器在请求到达前就拦下了,照样失败。
-
Nginx 用户:编辑站点配置(如
/etc/nginx/sites-enabled/your-site),在server或location ~ \.php$块内添加:client_max_body_size 135M;(必须 ≥ PHP 的 post_max_size)client_body_timeout 600;
修改后执行sudo nginx -t && sudo systemctl reload nginx -
Apache 用户:若用 .htaccess,确保
AllowOverride FileInfo已启用,然后添加:php_value upload_max_filesize 128Mphp_value post_max_size 132M
注意:此方式在 PHP-FPM 模式下无效,仅适用于 mod_php
验证临时目录是否可用
PHP 上传时会先把文件存到临时目录(upload_tmp_dir),若该目录不存在、不可写或空间不足,$_FILES['error'] 可能仍为 0,但 move_uploaded_file() 会静默失败。
- 在 phpinfo() 页面查找 upload_tmp_dir 的值;若为空,PHP 默认使用系统
/tmp - 建议显式设置一个可控路径,例如:
upload_tmp_dir = /var/www/uploads/tmp
然后创建该目录并赋权:sudo mkdir -p /var/www/uploads/tmp && sudo chown www-data:www-data /var/www/uploads/tmp
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











