已配置php.ini仍触发PostTooLargeException,Laravel5.5如何调整上传下载限制?
嘿,这种情况我熟!明明改了php.ini里的post_max_size,结果Laravel还是抛PostTooLargeException,多半是漏了几个关键配置或者没找对文件。咱们一步步来搞定:
第一步:先确认你改对了
php.ini文件 很多服务器会同时存在多个PHP配置文件——CLI命令行用的和Web环境用的根本不是同一个!别白忙活,先搞清楚Web环境真正在用哪个:
- 新建一个
phpinfo.php文件,内容写:
<?php phpinfo(); ?>
- 用浏览器访问这个文件,找到Loaded Configuration File这一行,这才是你需要修改的
php.ini路径,你之前改的是不是这个? - 改完配置后,一定要重启你的Web服务器(Apache/Nginx)和PHP-FPM(如果用的是这个运行模式),不然配置不会生效!
第二步:检查其他必需的PHP配置项
光改post_max_size不够,还有几个参数得配套调整,而且数值要合理:
upload_max_filesize:这个值必须小于等于post_max_size,比如你设了10240M,那这个也得设成10240Mmemory_limit:上传大文件需要足够的内存,建议设得比post_max_size大一点,比如12288Mmax_execution_time:大文件上传耗时久,别让PHP提前超时,设成300(5分钟)或者更长
把这些都加到正确的php.ini里,格式像这样:
upload_max_filesize = 10240M post_max_size = 10240M memory_limit = 12288M max_execution_time = 300
第三步:Laravel自身的限制检查
如果PHP配置都搞定了还是报错,得看看Laravel这边有没有额外限制:
- 检查验证规则:如果你在表单请求或者控制器里用了
max规则限制文件大小,比如'file' => 'max:10240',注意这里的单位是KB!10240KB等于10M,要对应10G的话得写成max:10485760(1010241024) - 异常处理(可选):如果确实需要捕获这个异常做友好提示,可以在
app/Exceptions/Handler.php里添加处理逻辑,比如:
use Illuminate\Http\Exceptions\PostTooLargeException; public function render($request, Exception $exception) { if ($exception instanceof PostTooLargeException) { return response()->json(['message' => '上传文件超过最大限制'], 413); } return parent::render($request, $exception); }
不过这只是治标,还是先把配置问题解决掉更稳妥。
第四步:Web服务器的请求大小限制
别忽略了Apache/Nginx本身也会限制请求体大小:
- Nginx:在
nginx.conf或者你的站点虚拟主机配置里添加client_max_body_size 10G;,然后重启Nginx - Apache:可以在
httpd.conf或者项目根目录的.htaccess里添加LimitRequestBody 10737418240(10G对应的字节数),或者设为0表示不限制,之后重启Apache
最后再确认一遍
改完所有配置后,一定要重新加载/重启Web服务器和PHP-FPM,然后再用phpinfo.php确认所有配置项都生效了,再测试上传就没问题啦!
内容的提问来源于stack exchange,提问作者Prashant Gaurav
相关产品推荐
相关产品推荐

