【问题标题】:RuntimeException SplFileInfo::getSize(): stat failed for... Laravel 4 upload imageRuntimeException SplFileInfo::getSize(): stat failed for... Laravel 4 上传图片
【发布时间】:2014-07-31 01:12:52
【问题描述】:

我使用 laravel 4(上次更新),我创建了一个 表单,我们可以在其中上传图片(徽标/头像)。我在 MAC OS, 我使用 sublime Text 3laravelMAMP 应用程序。我所有的配置都设置正确,没有运行问题。

我的问题是,当我从表单提交到达字段时,我遇到了这个 错误RuntimeException SplFileInfo::getSize(): /Applications/MAMP/tmp/php/phpRUJfMX

这是我表单中的代码nameOfTheForm.blade.php

@extends('layout.default')
@section('title')
Name Of My Project - EditProfile
@stop

@section('content')
{{Form::open(array('url'=>'uploadAvatar','files' => true))}}

<p>
{{Form::label('pseudo','pseudo (*): ')}}
{{Form::text('pseudo',Input::old('nom'))}}
</p>
@if ($errors->has('pseudo'))
<p class='error'> {{ $errors->first('pseudo')}}</p>
@endif
<br>
<br>

<p>
{{Form::label('url_Avatar','Avatar: ')}}
{{Form::file('url_Avatar',Input::old('Url_Avatar'))}}
</p>
@if ($errors->has('url_Avatar'))
<p class='error'> {{ $errors->first('url_Avatar')}}</p>
@endif
<br>
<br>

<p>
{{Form::submit('Validate your avatar')}}
</p>

{{Form::close()}}
@stop

这是来自我的控制器的代码:

public function uploadAvatar() {


//*****UPLOAD FILE (on server it's an image, on the DB it's an url*****
  $file = Input::File('url_Avatar');

  //set a register path to the uploaded file
  $destinationPath = public_path().'/upload/';

  //have client extension loaded file and set a random name to the uploaded file, produce a random string of length 32 made up of alphanumeric characters [a-zA-z0-9]

  $filename = $destinationPath . '' . str_random(32) . '.' . $file->getClientOriginalExtension();

  $uploaded = Input::File('url_Avatar')->move($destinationPath,$filename);

//*****VALIDATORS INPUTS and RULES*****
  $inputs = Input::all();
  $rules = array(
    'pseudo' => 'required|between:1,64|unique:profile,pseudo',
    //urlAvatar is an url in database but we register as an image on the server
    'url_Avatar' => 'required|image|min:1',
  );

上传的文件代码完美运行,我将文件注册到我想要的所选文件夹中。我的路线没有问题(无需显示这部分代码)。

但是当我提交表单时,我有这个错误: RuntimeException SplFileInfo::getSize(): /Applications/MAMP/tmp/php/phpRUJfMX 统计失败

错误信息详情: 打开:/Applications/MAMP/htdocs/nameOfMyProject/vendor/laravel/framework/src/Illuminate/Validation/Validator.php

    }
    elseif (is_array($value))
    {
        return count($value);
    }
    elseif ($value instanceof File)
    {
        return $value->getSize() / 1024;
    }
    else

看来,Laravel 需要(stat - 提供有关文件的信息),也就是说,需要从上传的文件中获取信息,这里是大小,但我在控制器中尝试了这个,就在 where 行之前这是 $uploaded 我将文件移动到所选文件夹中的位置:

//I add this line code before
$size= $file->getSize();
$uploaded=Input::File('url_Avatar')->move($destinationPath,$filename);

但是,当我这样做时,我遇到了另一个错误:验证器没有将文件识别为图像** 并要求我上传有效格式。我想我需要纠正我遇到的第一个错误 (SplFileInfo::getSize())

如果您有任何想法...谢谢。

【问题讨论】:

标签: php file-upload laravel-4 spl splfileobject


【解决方案1】:

短版:如果文件大小大于 php.ini 的 upload_max_filesize,Laravel 的 Symphony 源返回文件大小为 0。

建议检查您的 php.ini 文件。我不确定 MAMP 如何处理 php.ini,但如果你正在运行 Laravel,它就在那里。在 php.ini 中,upload_max_filesize 可能小于您尝试上传的文件。该值恰好在我的 Ubuntu 12.10 VM 上默认为 2megs。

检查

/vendor/symphony/http-foundation/Symphony/Component/HttpFoundation/File/UploadedFile.php

并检查getMaxFilesize()。默认情况下,此方法从主机系统上的 PHP.ini 文件中获取 upload_max_filesize 值。

有趣的是,如果你这样做了

$foo = Input::file('uploaded_file') 
var_dump($foo) 

使用 Laravel 的 die&amp;dump dd($foo),那么大于 php.ini 的 upload_max_filesize 的文件返回大小为 0。

除了 upload_max_filesize,PHP 文档还提到检查 php.ini 以便:

- post_max_size must be larger than upload_max_filesize
- memory_limit should be larger than post_max_size

【讨论】:

  • 我现在没有我的代码,但明天我会尝试这个解决方案。感谢两位的理解。
  • 这样就可以了,MAMP 在 htdocs 文件夹中有另一个 php.ini 文件,我可以更改一些参数,例如图像大小文件。所以我按照你的步骤,用你的代码。
【解决方案2】:

我在 Laravel 6x 中遇到了同样的错误。此错误是由于不可为空的列的空值造成的。

为了解决我刚刚将列更改为接受 null 之后工作正常。

【讨论】:

    【解决方案3】:

    我用编辑列属性默认“null”解决了我的问题,问题消失了。

    【讨论】:

      【解决方案4】:

      我知道这个问题已经回答了很久,但我在 PHP 网站上发现了一些可能有用的东西,因为它实际上解释了错误发生的原因:

      如果你使用 Symfony 的 UploadedFile, 请注意,如果您调用此方法 你调用@move之后,你很可能会得到 一些不可追踪的错误,上面写着:

      stat failed

      如果你真的想一想,这确实是有道理的, 该文件已被 Symfony 移动,但 getSize 在 SplFileInfo 中, 并且 SplFileInfo 不知道该文件已被移动。

      来源:https://www.php.net/manual/en/splfileinfo.getsize.php#122780

      【讨论】:

        猜你喜欢
        • 2020-01-20
        • 2019-04-06
        • 2020-01-11
        • 2020-01-18
        • 2014-05-11
        • 2013-05-14
        • 2014-12-22
        • 1970-01-01
        • 2015-03-13
        相关资源
        最近更新 更多