PHP文件上传大小需协同修改PHP、Web服务器及代码三层配置:一、改php.ini中upload_max_filesize、post_max_size和memory_limit并重启服务;二、Nginx加client_max_body_size,Apache设LimitRequestBody;三、框架或代码层做二次校验与MIME检测;四、用test.php验证配置生效。

PHP网站的文件上传大小不是靠改源码实现的,而是由多层配置协同控制。改错一层,上传就可能在中途失败——比如PHP已允许100MB,但Nginx卡在2MB,用户会直接收到413错误,且PHP日志里完全没记录。
一、改PHP核心参数(必须做)
打开你实际生效的 php.ini 文件(用 phpinfo() 查“Loaded Configuration File”路径),修改以下三项:
-
upload_max_filesize:单个文件上限,例如
upload_max_filesize = 100M -
post_max_size:整个POST请求总容量,必须 ≥ upload_max_filesize,建议留5–10MB余量,例如
post_max_size = 105M -
memory_limit:脚本内存上限,应为 post_max_size 的1.5–2倍,例如
memory_limit = 256M
改完保存,必须重启 PHP-FPM 或 Apache 才生效。Windows XAMPP 用户需重启“Apache”和“PHP”服务;Linux 常用命令如 sudo systemctl restart php8.1-fpm(版本号按实际调整)。
二、同步调 Web 服务器限制(常被忽略)
PHP还没开始运行,请求就可能被Web服务器拦下:
立即学习“PHP免费学习笔记(深入)”;
-
Nginx 用户:在站点 server 块内加
client_max_body_size 105m;(单位小写 m,别写 MB) -
Apache 用户:在虚拟主机配置或 .htaccess 中加
LimitRequestBody 110100480(105MB = 110100480 字节)
改完 Nginx 要执行 nginx -t && nginx -s reload;Apache 则用 sudo a2enmod rewrite(如未启用)后 sudo systemctl reload apache2。
三、框架或代码层校验(补充业务规则)
这一步不解决“上传失败”,只做二次把关,比如某字段只允许5MB图片:
- ThinkPHP 中用
$file->validate(['size' => 5242880, 'ext' => ['jpg','png']]) - 原生PHP可检查
$_FILES['xxx']['error'] === UPLOAD_ERR_INI_SIZE或['size'] > 5242880 - 务必配合 MIME 类型检测(
finfo_open),不能只信$_FILES['type'],后者易伪造
四、验证是否真正生效
别凭感觉判断。新建一个 test.php 放到网站根目录:
echo 'upload_max_filesize: ' . ini_get('upload_max_filesize') . '<br>';
echo 'post_max_size: ' . ini_get('post_max_size') . '<br>';
phpinfo();
?>
访问该页面,确认三项数值是你刚设的值,并核对“Loaded Configuration File”路径是否正确。再用一个略超旧限制、略低于新限制的文件实测上传流程。



















