Laravel文件上传报错:POST Content-Length超出限制求助
这个问题我之前也碰到过,其实不是Laravel的配置出问题,是PHP本身的上传限制在搞鬼!先给你拆解下错误原因:
Warning: POST Content-Length of 31492035 bytes exceeds the limit of 8388608 bytes in Unknown on line 0
这个提示说的是,你上传的文件大概31MB,但PHP默认的POST内容长度限制只有8MB——PHP在Laravel开始处理请求之前就把这个大文件拦截了,所以你在App.php和控制器里设置的maxFileSize根本没机会生效。
下面是具体的解决步骤:
解决方法
1. 修改PHP核心配置(最推荐)
首先找到你的php.ini文件(可以通过在Laravel里写个临时路由输出phpinfo(),查看Loaded Configuration File这一行的路径),修改以下3个关键参数:
upload_max_filesize: 设置成比你要上传的文件大的值,比如32M或者100Mpost_max_size: 这个值必须比upload_max_filesize大,因为POST请求里除了文件可能还有其他表单数据,建议设为40M或者120Mmemory_limit: 可选,如果上传超大文件(比如几十MB以上),可以适当调高,比如128M
举个配置示例:
upload_max_filesize = 32M post_max_size = 40M memory_limit = 128M
修改完记得重启你的Web服务器(Apache/Nginx)和PHP-FPM(如果用的是这个运行模式)。
2. 没有权限改php.ini?试试这些方法
方法A:用.htaccess(仅Apache服务器)
在Laravel项目根目录的.htaccess文件里添加以下内容:
php_value upload_max_filesize 32M php_value post_max_size 40M php_value memory_limit 128M
方法B:在入口文件临时设置
在public/index.php的最顶部添加这段代码:
ini_set('upload_max_filesize', '32M'); ini_set('post_max_size', '40M'); ini_set('memory_limit', '128M');
注意:有些服务器会禁用ini_set()修改这些系统参数,所以这个方法不一定能生效。
3. 顺便检查下Laravel的配置是否正确
虽然这次错误和它无关,但确保你的配置能被正确读取:
- 不要直接用
$allowedFileTypes和$maxFileSize变量,建议用Laravel的配置助手函数获取,比如:$rules = [ 'attachments.*' => 'required|mimes:' . config('app.allowedFileTypes') . '|max:' . config('app.maxFileSize') ]; - 你的
maxFileSize设置的是10000000000*2(20GB),单位是字节,Laravel的max验证规则确实是按字节算的,这个没问题。
4. 额外提醒
如果用的是Nginx服务器,还要记得修改nginx.conf或者站点配置里的client_max_body_size,比如设为40M,否则Nginx会先于PHP拦截大文件请求。
内容的提问来源于stack exchange,提问作者Ruka Xing
相关产品推荐
相关产品推荐

