You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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或者100M
  • post_max_size: 这个值必须比upload_max_filesize大,因为POST请求里除了文件可能还有其他表单数据,建议设为40M或者120M
  • memory_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:26:53