PHP上传文件大小限制,修改php.ini
前言
上传个大点的文件,提示"文件过大"或者直接报错?那是PHP上传限制太小了。本文讲怎么改php.ini调大上传限制。
一、默认限制多大
PHP默认上传限制一般是:
upload_max_filesize= 2Mpost_max_size= 8M
传个10M的文件就不行了。
二、要改哪几个参数
1. upload_max_filesize
单个文件最大大小:
upload_max_filesize = 100M
2. post_max_size
整个POST请求最大大小:
post_max_size = 100M
注意: post_max_size要 >= upload_max_filesize。
3. memory_limit
脚本可用内存:
memory_limit = 128M
要比post_max_size大。
4. max_execution_time
脚本最大执行时间(秒):
max_execution_time = 300
传大文件要久一点,设长点。
5. max_input_time
接收数据最大时间(秒):
max_input_time = 300
三、找php.ini
php --ini
或者写个phpinfo:
<?php
phpinfo();
?>
看Loaded Configuration File。
四、修改php.ini
改成100M上传
upload_max_filesize = 100M
post_max_size = 100M
memory_limit = 128M
max_execution_time = 300
max_input_time = 300
改成50M上传
upload_max_filesize = 50M
post_max_size = 50M
memory_limit = 64M
五、改完重启
PHP-FPM
systemctl restart php-fpm
Apache
systemctl restart httpd
六、验证
写个phpinfo,看这几个参数改了没:
<?php
phpinfo();
?>
搜 upload_max_filesize,看是不是改过来了。
七、Nginx也要改
光改PHP不够,Nginx也有限制。
Nginx配置
client_max_body_size 100M;
改完重载
nginx -t
nginx -s reload
八、常见坑
坑1:改了php.ini不生效
改的不是实际加载的那个。
解决: 用phpinfo看实际加载的是哪个。
坑2:只改了upload_max_filesize
post_max_size没改,还是不行。
注意: 两个都要改,post_max_size >= upload_max_filesize。
坑3:Nginx挡了
PHP改了,Nginx的client_max_body_size没改,还是413错误。
解决: Nginx也改。
坑4:内存不够
Allowed memory size of ... bytes exhausted
解决: 加大memory_limit。
坑5:上传超时
大文件传一半就断了。
解决: 加大max_execution_time和max_input_time。
坑6:.htaccess里覆盖了
有些主机在.htaccess里设了php_value。
检查: 看看.htaccess里有没有。
九、快速排查
上传报错
- 先看PHP的upload_max_filesize够不够
- 再看post_max_size够不够
- 再看Nginx的client_max_body_size够不够
- 再看memory_limit够不够
十、推荐配置
一般网站(20M上传)
upload_max_filesize = 20M
post_max_size = 20M
memory_limit = 64M
文件站(100M上传)
upload_max_filesize = 100M
post_max_size = 100M
memory_limit = 128M
max_execution_time = 300
max_input_time = 300
Nginx对应
client_max_body_size 100M;
总结
记住:
- 改三个参数:upload_max_filesize、post_max_size、memory_limit
- post_max_size >= upload_max_filesize
- Nginx也要改client_max_body_size
- 改完重启php-fpm和reload nginx
- 大文件要加大超时时间
最常用:
upload_max_filesize = 100M
post_max_size = 100M
memory_limit = 128M
遇到问题加QQ23979811 协助处理