![](/img/trans.png)
[英]RuntimeException SplFileInfo::getSize(): stat failed for… Laravel 6 upload image
[英]RuntimeException SplFileInfo::getSize(): stat failed for... Laravel 4 upload image
我使用laravel 4 (last update) ,我創建了一個表單,我們可以在其中上傳圖像(徽標/頭像)。 我在MAC OS 上,我使用sublime Text 3 、 laravel和MAMP Applications 。 我所有的配置都設置正確,沒有運行問題。
我的問題是,當我從表單提交到達字段時出現此錯誤: RuntimeException SplFileInfo::getSize(): stat failed for /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(): stat failed for /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 - 提供有關文件的信息),也就是說,需要從上傳的文件中獲取信息,這里是大小,但我在我的控制器中嘗試在 $uploaded 行之前我將文件移動到所選文件夾中的位置:
//I add this line code before
$size= $file->getSize();
$uploaded=Input::File('url_Avatar')->move($destinationPath,$filename);
但是,當我這樣做時,我又遇到了另一個錯誤:驗證器沒有將文件 r** 識別為圖像** 並要求我上傳有效格式。 我想我需要糾正我遇到的第一個錯誤(SplFileInfo::getSize())
如果您有任何想法...謝謝。
簡短版本:如果文件大小大於 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
我在 Laravel 6x 中遇到了同樣的錯誤。 此錯誤是由於不可為空的列的空值所致。
為了解決這個問題,我只是將列更改為接受 null 之后工作正常。
我用編輯列屬性默認“空”解決了我的問題,問題消失了。
我知道這個問題很久以前就有人回答過,但我在 PHP 網站上發現了一些可能有用的東西,因為它實際上解釋了為什么會發生錯誤:
如果你正在使用 Symfony 的 UploadedFile,請注意,如果你在調用 @move之后調用這個方法,你很可能會得到一些不可追蹤的錯誤,它說:
stat failed
如果你真的考慮一下,這確實是有道理的,文件已被 Symfony 移動,但 getSize 在 SplFileInfo 中,而 SplFileInfo 不知道文件已被移動。
來源: https : //www.php.net/manual/en/splfileinfo.getsize.php#122780
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.