5

私はlaravel 4(最終更新)を使用しており、画像(ロゴ/アバター)をアップロードできるフォームを作成しています。私はMAC OSを使用しており、崇高な Text 3laravel、および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

エラー情報の詳細: open:/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);

しかし、私がそれをしたとき、別のエラーが発生しました: バリデーターはファイルを画像として認識しません** et ask me to upload a valid format . 最初に発生したエラーを修正する必要があると思います(SplFileInfo::getSize())

何かアイデアがあれば... ありがとうございます。

4

4 に答える 4

3

短いバージョン: Laravel の Symphony ソースは、ファイル サイズが php.ini の よりも大きい場合、ファイル サイズ 0 を返しますupload_max_filesize

php.ini ファイルを確認することをお勧めします。MAMP が php.ini をどのように処理するかはわかりませんが、Laravel を実行している場合はそこにあります。php.ini では、upload_max_filesize がアップロードしようとしているファイルよりも小さい場合があります。その値は、Ubuntu 12.10 VM でたまたまデフォルトで 2 メガに設定されていました。

小切手

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

を確認しgetMaxFilesize()ます。デフォルトでは、このメソッドはupload_max_filesizeホスト システムの PHP.ini ファイルから値を取得します。

これに関する興味深い点は、

$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
于 2014-07-16T22:05:38.310 に答える