簡體   English   中英

RuntimeException SplFileInfo::getSize(): stat failed for... Laravel 4 上傳圖片

[英]RuntimeException SplFileInfo::getSize(): stat failed for... Laravel 4 upload image

我使用laravel 4 (last update) ,我創建了一個表單,我們可以在其中上傳圖像(徽標/頭像)。 我在MAC OS 上,我使用sublime Text 3laravelMAMP 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM