fre*_*dev 5 php spl file-upload splfileobject laravel-4
我使用laravel 4(最新更新),我创建了一个可以上传图像(徽标/头像)的表单。我在MAC OS上,我使用sublime Text 3,laravel和MAMP Applications。我所有的配置都正确,没有运行问题。
我的问题是,当我从表单提交到达字段时遇到此错误: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
Run Code Online (Sandbox Code Playgroud)
这是我的控制器中的代码:
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',
);
Run Code Online (Sandbox Code Playgroud)
上载的文件代码可以完美运行,我将文件注册到所需的所选文件夹中。我的路线没有问题(无需显示代码的这一部分)。
但是,当我提交表单时,出现以下错误: 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
Run Code Online (Sandbox Code Playgroud)
看来,Laravel需要(状态-提供有关文件的信息),也就是说,需要具有来自上载文件的信息,这里是大小,但是我在控制器中尝试了此操作,这里是$ uploaded我将文件移动到所选文件夹中的位置:
//I add this line code before
$size= $file->getSize();
$uploaded=Input::File('url_Avatar')->move($destinationPath,$filename);
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我又遇到了另一个错误:验证器没有将文件识别为图片**,并要求我上传有效格式。我想我需要更正我遇到的第一个错误(SplFileInfo :: getSize())
如果您有任何想法...谢谢。
简短版本:如果文件大小大于 php.ini 的,Laravel 的 Symphony 源将返回文件大小 0 upload_max_filesize。
建议检查您的 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(). 默认情况下,此方法upload_max_filesize从主机系统上的 PHP.ini 文件中获取值。
有趣的是,如果你这样做
$foo = Input::file('uploaded_file')
var_dump($foo)
Run Code Online (Sandbox Code Playgroud)
或者
使用 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
Run Code Online (Sandbox Code Playgroud)