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

Laravel 5.4 文件上传超时求助:执行时长超60秒报错

解决Laravel 5.4图片上传超时问题

嘿,我来帮你搞定这个上传超时的麻烦!你遇到的错误是:

Symfony \ Component \ Debug \ Exception \ FatalErrorException (E_UNKNOWN) Maximum execution time of 60 seconds exceeded /vendor/league/flysystem/src/Adapter/Local.php

这个错误说明在本地存储图片的过程中,耗时超过了PHP默认的60秒执行上限。咱们从代码问题和环境配置两个方向来解决:

一、先修正代码里的潜在坑

你的代码有几个容易引发问题的地方,先调整过来:

1. 模型方法命名冲突

你在Product模型里定义了一个create()实例方法,但Laravel的Eloquent模型本身就自带静态的create()方法,虽然当前调用逻辑没直接出问题,但这种命名很容易搞混,后续维护也容易踩坑。建议把模型里的方法改个名字,比如storeAndCreate():

// 修改后的模型逻辑
public function storeAndCreate() {
    $file = request()->file('photo');
    $extension = $file->extension();
    // 加个时间戳避免同名文件覆盖,也减少重复写入的可能
    $name = request('name') . request('roast') . '_' . time() . '.' . $extension;
    $path = $file->storeAs('public/images', $name);
    
    return product::create([
        'name' => request('name'),
        'roast' => request('roast'),
        'origin' => request('origin'),
        'photo' => $path,
        'price' => request('price'),
        'stock' => 0
    ])->name;
}

然后控制器里对应修改调用逻辑:

// 修改后的控制器逻辑
public function create(Request $request) { 
    $validatedData = $request->validate([ 
        'name' => 'required|min:2', 
        'roast' => 'required|min:2', 
        'origin' => 'required|min:2', 
        'price' => 'required', 
        'photo' => 'required|file|image|max:2048' // 新增文件大小限制,比如限制最大2MB
    ]); 
    
    $product = new Product; 
    $name = $product->storeAndCreate(); 
    session()->flash("message", "$name was created"); 
    return back(); 
}

2. 增加文件大小验证

在表单验证里给photo加上max:2048(单位是KB,也就是2MB),避免用户上传超大文件导致超时。你可以根据实际需求调整这个数值。

二、直接解决超时问题

如果调整代码后还是超时,咱们从环境配置入手:

  • 临时提高脚本执行时间:在控制器的create方法开头加上set_time_limit(120);,把当前脚本的执行时间临时提高到120秒,这是快速试错的临时方案,不建议长期依赖。
  • 检查存储目录权限:确保storage/app/public/images目录存在,并且服务器有写入权限(Linux下一般设置755权限)。权限不足的话,Flysystem会反复尝试写入,最后就超时了。
  • 优化存储方式:如果经常传大文件,考虑用云存储替代本地存储,云存储的上传效率更高,也能减少本地IO的耗时。
  • 修改PHP全局配置:找到服务器上的php.ini文件,把max_execution_time参数从60改成更大的数值(比如120),修改后记得重启Web服务器生效。

三、额外小建议

  • 给文件名加时间戳或者随机字符串,避免同名文件被覆盖,就像我上面模型代码里改的那样。
  • 可以用Laravel的Storage门面来操作文件,代码会更清晰,比如把$file->storeAs()改成:
use Illuminate\Support\Facades\Storage;

$path = Storage::putFileAs('public/images', $file, $name);

内容的提问来源于stack exchange,提问作者seamus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:12:19