web-dev-qa-db-ja.com

ファイルがアップロードされないPHPでcatchステートメントを試してください

Try-catchステートメントが何をするのか理解していますが、php.netのドキュメントを読むと、自分のコードにそれを実装することができません。理解するのに役立つ実例が必要です。

アップロードが成功しなかった場合、どうすればこの例をtry catchステートメントに変換できますか?

$move = move_uploaded_file($_FILES['file']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/uploads/".$_FILES['file']['name']);

if (!$move) {
    die ('File didn't upload');
} else {            
    //opens the uploaded file for extraction
    echo "Upload Complete!";
}

これは動作する良い例ではないかもしれませんが、どんな助けもありがたいです。

32
Ben McRae

このようにすることができます。

try {
    //throw exception if can't move the file
    if (!move_uploaded_file( ... )) {
        throw new Exception('Could not move file');
    }

    //do some more things with the file which may also throw an exception
    //...

    //ok if got here
    echo "Upload Complete!";
} catch (Exception $e) {
    die ('File did not upload: ' . $e->getMessage());
}

上記の例については少し無意味ですが、あなたはアイデアを得る必要があります。どこからでも(たとえば、try {}を使用して呼び出す関数/メソッド内から)例外をスローでき、それらは上方に伝播することに注意してください。

50
Tom Haigh

さて、例外を使用したい場合は、次のようなことができます:

function handleUpload() {


    $move = move_uploaded_file($_FILES['file']['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/uploads/".$_FILES['file']['name']);

    if (!$move) {
       throw new Exception('File Didnt Upload');
    }

}

try {
   handleUpload();
   echo "File Uploaded Successfully";
} catch(Exception $ex) {
   die($ex->getMessage);
}

これは肥大化したように見えるかもしれませんが、コールスタックのどこからでもメソッドを呼び出して、いつでも例外をキャッチできます。

9
Kazar

try-catchステートメントは、例外を処理するために使用されます。関数move_uploaded_filesは例外をスローする可能性があるため、コードが記述されているのは正しいと思います。呼び出しの後、戻りコードを確認します。 falseの場合、処理を終了します。それ以外の場合、成功を報告します。

7
Sean

PHPbugの同様の投稿によると、OOコード(オブジェクト指向コード)のみが例外をスローします。つまり、move_uploaded_fileなどの関数は独自の例外をスローしませんが、他のコードは例外をスローします。

3
Al McNicoll

this が役立ちました。

例外処理とtry catchのアプリケーションの良い例は、 here です。

2
Simon Jackson

[PHP 5.3] [1]の例外ベストプラクティスをご覧ください。

PHPでの例外処理は、一気に新機能ではありません。次のリンクでは、例外に基づいたPHP 5.3の2つの新機能が表示されます。 1つ目はネストされた例外で、2つ目はSPL拡張機能(PHPランタイム)のコア拡張機能)によって提供される新しい例外タイプのセットです。これらの新しい機能は両方とも、ベストプラクティスの本に進み、詳細に検討する価値があります。

http://ralphschindler.com/2010/09/15/exception-best-practices-in-php-5-

0
HMagdy