0

アップロードする単純な画像ファイルを取得してから、指定されたフォルダーに移動しようとしていますが、エラーメッセージは表示されず、すべてが機能していると表示されますが、どのフォルダーにも表示されません。問題のコードは次のとおりです。

        $destination = public_path().'/auction_img/';
        $filename = $auction->id;

        if (Input::hasFile('image')) {
            $file = Input::file('image');
            try{
            $uploadSuccess = $file->move($destination, $filename.$file->getClientOriginalExtension());
            }catch(Exception $e){
                error_log('Exception: '.$e->getMessage());
            }
            if($uploadSuccess){
                error_log("YAY!");
            }
        }

例外は発生せず、error_log に「YAY」が記録されます。しかし、それは私が何をしても現れません。何か案は?php.ini も確認しましたが、最大サイズは 20M ですが、ファイルは約 .5MB しかありません

4

2 に答える 2

3

思うように進まないようです。

初めに

try{} catch() {}

Laravel では動作しません。ハンドラーを設定する必要があります。

App::error(function(Exception $exception)
{
    Log::error($exception);
});

次に、移動の完全なログを作成して、必要な場所に実際に移動しているかどうかを確認します。

$destination = public_path().'/auction_img/';
$filename = $auction->id;

if (Input::hasFile('image')) {

    $file = Input::file('image');

    $uploadSuccess = $file->move($destination, "$filename.".$file->getClientOriginalExtension());

    if($uploadSuccess) 
    {
        error_log("Destination: $destination");
        error_log("Filename: $filename");
        error_log("Extension: ".$file->getClientOriginalExtension());
        error_log("Original name: ".$file->getClientOriginalName());
        error_log("Real path: ".$file->getRealPath());
    }
    else
    {
        error_log("Error moving file: ".$file->getClientOriginalName());
    }
}

また、元のファイルが本来あるべき場所にあるかどうかも確認してください。

コメントによると、あなたの動きは次のとおりです。

$uploadSuccess = $file->move($destination, "$filename.".$file->getClientOriginalExtension());

パブリック フォルダーを指しているかどうかを確認$destinationします。次のようになっている必要があります。

/var/www/site/public/auction_img/

返されるかどうかを確認し、public_path()返さ/var/www/site/public/れない場合は、代わりにこれを使用できます。

$destination = app()->make('path.public').'/auction_img/'
于 2013-10-25T02:03:25.040 に答える
0

少なくとも Laravel 4.0 の $uploadSuccess はブール値ではありません。移動後にファイル オブジェクトを返します ($file を返すため、チェーンすることができます)。このオブジェクトを確実にブール値にキャストすることはできません (あなたのように if ステートメントで使用しようとすると、Symfony は例外を発生させます)。

ファイルの移動に失敗すると、例外が発生します。例外が発生した場合は、ファイルが移動されておらず、そのままの場所に残っていることがわかります。そのため、$file は有効な Symfony ファイル オブジェクトとして残されるため、最初に到達したファイルから処理が続行されます。

したがって、ファイルが正常に移動されたかどうかに関係なく、「YAY!」常に実行パスにあります。移動が失敗した場合は例外をキャッチし、ログに記録してから、例外に対してそれ以上のアクションを実行できません。

于 2014-01-29T15:38:19.373 に答える