【问题标题】:SplFileInfo::getSize(): stat failedSplFileInfo::getSize(): 统计失败
【发布时间】:2020-01-18 01:29:50
【问题描述】:

尝试将图像上传到 laravel 存储时出现错误。

SplFileInfo::getSize(): C:\xampp\tmp\php3624.tmp 的统计失败

但我什至没有使用 SplFileInfo 函数。 这是我的代码。

public function store(Request $request)
    {
        $this->validate($request, [
            'title' => 'required|max:191',
            'sub_title' => 'required|max:191',
            'description' => 'required',
            'active' => 'required',
            'img' => 'image|mimes:jpg,png,svg,gif,jpeg|max:2048'
        ]);

        $services = new Services;
        if($request->hasFile('img')){
            $imageName = time().'_NEWS.'.$request->file('img')->getClientOriginalExtension();
            // dd($request->file('img')->getMaxFilesize());
            $services->news_image = $imageName;
            $request->file('img')->move(public_path('storage/services/'), $imageName);


        }
        $services->title = $request->input('title');
        $services->sub_title = $request->input('sub_title');
        $services->description = $request->input('description');
        $services->active = $request->input('ative');
        $services->save();

        return redirect('/admin/services')->with('success', 'Succesvol een behandeling aangemaakt');
    }

我希望有人可以在这里帮助我。我已经知道它是一个 Symfony 错误,但我找不到任何问题的答案。我已经改变了我的

post_max_size=40M 和 upload_max_filesize=40M

在 PHP.ini 中,这不会是问题。

【问题讨论】:

  • 在你的代码的哪一行触发了错误/异常?
  • 您正在间接使用 SplFileInfo。 Laravel 使用 Symfony 的 HttpFoundation 组件,当你使用 $request->file('img') 时,你会得到一个 UploadedFile,它扩展了 File,然后又扩展了 \SplFileInfo。错误消息提示上传文件的大小存在问题。您是否检查过 ini 值是否在某处被覆盖?也许在你的控制器中使用ini_get('upload_max_filesize') 来确保
  • @dbrumann,我使用了命令dd(ini_get('upload_max_filesize'));,它给了我 40M,因为它没有自我覆盖。
  • @Jakumi,错误是在$imageName = time().'_NEWS.'.$request->file('img')->getClientOriginalExtension(); 上触发的,所以大括号内的第一行。
  • 所以本质上,应该存在的文件不存在(不再存在)或不可访问(-> stat 失败)。 php 存在一个长期存在的问题,需要在表单元素上设置 enctype(请检查您的表单是否有):php.net/manual/en/features.file-upload.post-method.php(据我所知,max_file_size 是可选的,但您可以只添加它为了安全起见)。否则:laravel(重新)是否有可能以某种方式自行移动文件?

标签: php symfony file-upload laravel-6


【解决方案1】:

发生错误是因为您已 move()d 文件然后 getSize()d 对象。尝试设置变量并分配大小,然后移动文件。

{
     ...
     $size=$request->file('img')->getSize();
     $request->file('img')->move(public_path('storage/services/'), $imageName);
}

【讨论】:

    【解决方案2】:

    这帮助我解决了这个问题。 也许不是最好的解决方案,但它对我有用。

        public function store(Request $request)
    {
        $this->validate($request, [
            'title' => 'required|max:191',
            'sub_title' => 'required|max:191',
            'description' => 'required',
            'active' => 'required',
            'img' => 'image|mimes:jpg,png,svg,gif,jpeg|max:2048'
        ]);
    
        $services = new Services;
        if($request->hasFile('img')){
            $imageName = time().'_NEWS.'.$request->file('img')->getClientOriginalExtension();
            // dd($request->file('img')->getMaxFilesize());
            $services->news_image = $imageName;
            $request->file('img')->move(public_path('storage/services/'), $imageName);
            $size=$request->file('img')->getSize();   
    
    
        }
        $services->title = $request->input('title');
        $services->sub_title = $request->input('sub_title');
        $services->description = $request->input('description');
        $services->active = $request->input('ative');
        $services->save();
    
        return redirect('/admin/services')->with('success', 'Succesvol een behandeling aangemaakt')->with($size);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-20
      • 2019-04-06
      • 2020-01-20
      • 2014-07-31
      • 2020-01-11
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      相关资源
      最近更新 更多