RuntimeException SplFileInfo :: getSize():stat失败... Laravel 4上传图片

时间:2014-06-10 10:04:57

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

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

我的问题是,当我从表单提交到达字段时,我有错误 RuntimeException SplFileInfo :: getSize():/ Applications / MAMP / tmp / php / phpRUJfMX的stat失败

以下是我的表单中的代码 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的stat失败

错误信息详情: 开:/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 - 提供有关文件的信息),也就是说,需要从上传的文件中获取信息,这里是大小,但是我在我的控制器中尝试这个,就在这里这里是$ upload,我在我选择的文件夹中移动文件:

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

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

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

3 个答案:

答案 0 :(得分:3)

我在Laravel 6x中遇到了相同的错误。此错误是由于culumn的空值不可为空。 为了解决这个问题,我只是将列更改为在可以正常工作之后接受null。

答案 1 :(得分:2)

简短版本:如果文件大小大于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&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

答案 2 :(得分:0)

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