Laravel上传文件超php.ini限制 免改配置屏蔽错误并验证
解决POST文件超限的PHP警告(无需修改php.ini)
嘿,我来帮你搞定这个问题!你遇到的这个POST Content-Length警告,是因为PHP默认的post_max_size设置是8MB——而且这个错误会在Laravel的验证逻辑启动之前就触发,导致你写的Validator规则根本没机会生效。不用动php.ini,按下面两步操作就能解决:
1. 先把烦人的警告屏蔽掉
这个警告是PHP在请求到达Laravel框架之前就输出的,所以得在项目的入口文件public/index.php最顶部加两行配置,把警告给压下去:
// 放在public/index.php的最开头 error_reporting(E_ALL & ~E_WARNING); ini_set('display_errors', 0);
这样用户就看不到那个难看的Warning信息了。
2. 补充验证逻辑,拦截超大文件
当文件超过PHP的post_max_size限制时,Laravel拿到的$request->file('photo')会是null,所以你得在原有验证之前先判断这个情况:
// 先检查是不是因为文件过大导致请求里的文件丢失了 if (!$request->hasFile('photo') && is_null($request->input('photo'))) { dd('Photo exceeds the maximum allowed size (8MB)!'); } // 再执行你原来的验证规则 $validator = Validator::make($request->all(), [ 'photo' => 'required | mimes:jpeg,jpg,png | max:30000', ]); if ($validator->fails()) { dd('Photo is invalid (too big or wrong format)...'); }
这里要提一句:你设置的max:30000是30000KB(约29MB),但因为PHP的8MB限制,超过8MB的文件根本到不了Laravel的验证环节,所以这个规则只能管8MB以内、30MB以下的文件。要是想让提示更统一,可以把判断里的提示改成和Validator一致的内容。
如果追求更优雅的写法,也可以把这个逻辑放到自定义请求类里,但上面的方法是最直接、不用改配置的方案。
内容的提问来源于stack exchange,提问作者Mengseng Oeng
相关产品推荐
相关产品推荐

