必须同步调整php层(upload_max_filesize、post_max_size等)、laravel验证层(max规则单位为kb)和文件系统配置层(config/filesystems.php中max_file_size),三者缺一不可,否则任意一层拦截均导致上传失败。

改 Laravel 文件上传大小限制,不能只改一个地方——PHP 层、Laravel 验证层、文件系统配置层,三者必须协同调整,否则任意一层卡住都会导致上传失败。
PHP ini 配置是硬门槛,不改它前端根本传不到 Laravel
用户选完文件点上传,浏览器还没发出去就报 413 Request Entity Too Large,或者 Laravel $request->file('xxx') 返回 null,大概率是这里拦住了。
-
upload_max_filesize:单个文件最大值,比如设为50M -
post_max_size:整个 POST 请求体上限,必须 ≥upload_max_filesize(含其他字段+文件) -
max_execution_time:大文件上传耗时长,建议调到300或更高 -
memory_limit:避免 PHP 进程因读取大文件爆内存,至少256M
改完记得重启 Web 服务(sudo systemctl restart php-fpm 或 apache2),并用 php -i | grep -E 'upload_max_filesize|post_max_size' 确认生效。
Laravel 的 validate() 规则会二次拦截,max 参数单位是 KB
即使 PHP 层放行了,控制器里 $request->validate(['file' => 'max:2048']) 也会把超过 2MB 的文件拒之门外——注意这个 max:2048 是 KB,不是 MB。
- 想允许 50MB,写
max:51200(50 × 1024) - 配合类型限制更安全:
'file|mimes:pdf,docx|max:51200' - 如果用
max:50000却仍报错,检查是否漏了file规则——没有它,Laravel 不会把请求字段当文件处理
config/filesystems.php 的 max_file_size 是可选保险,但仅对 store() 生效
这个配置项实际作用很有限:它只在调用 $file->store() 时触发检查,且默认不存在,需手动添加。它不参与 HTTP 请求解析,也不影响验证逻辑。
- 只对指定磁盘生效,例如
'public' => ['driver' => 'local', 'max_file_size' => 50 * 1024 * 1024] - 它不会抛出标准验证错误,而是直接 throw Exception,需自己 try/catch
- 多数项目没必要加,PHP + validate 已足够;加它只为多一道应用层兜底
真正容易被忽略的是:上传路径权限、storage:link 是否执行、以及 Nginx/Apache 自身的 client_max_body_size(尤其部署在云服务器或反向代理后)。这些不在 Laravel 代码里,但任何一个没配对,上传就会静默失败。











