web-dev-qa-db-fra.com

essayez déclaration de capture dans PHP où le fichier n'est pas téléchargé

Je comprends ce que font les instructions try-catch, mais en lisant la documentation sur php.net, je ne serais pas en mesure de la mettre en œuvre dans mon propre code. J'ai besoin d'un exemple réel pour m'aider à comprendre.

Comment puis-je transformer cet exemple en instruction try catch si le téléchargement échoue?

$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!";
}

Ce n'est peut-être pas un bon exemple, mais toute aide serait la bienvenue.

32
Ben McRae

Vous pouvez le faire comme ça.

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());
}

C'est un peu inutile pour l'exemple ci-dessus, mais vous devriez avoir l'idée. Notez que vous pouvez lancer les exceptions de n’importe où (par exemple, dans une fonction/méthode que vous appelez depuis try {}) et elles se propagent vers le haut.

50
Tom Haigh

Eh bien, si vous voulez utiliser des exceptions, vous pouvez faire quelque chose comme:

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);
}

Je sais que cela peut sembler énorme - mais vous pouvez appeler la méthode à partir de n'importe où dans la pile d'appels et intercepter l'exception à tout moment.

9
Kazar

Les instructions try-catch sont utilisées pour gérer les exceptions. Je ne crois pas que la fonction move_uploaded_files puisse émettre une exception et une exception, en tant que telle, je pense que votre code est écrit est correct Après l'appel, vous regardez le code de retour. Si c'est faux, vous terminez le traitement, sinon vous signalez la réussite.

7
Sean

Selon un article similaire de PHPbug, seul le code OO (code orienté objet) lève des exceptions. Cela signifie que des fonctions telles que move_uploaded_file ne lanceront pas leurs propres exceptions, mais un autre code le fera.

3
Al McNicoll

J'ai trouvé ceci utile.

Un bon exemple de l'application de la gestion des exceptions et d'essayer de capturer des choses est ici .

2
Simon Jackson

Vous devez jeter un oeil sur les [Meilleures pratiques en matière d'exception dans PHP 5.3] [1].

La gestion des exceptions dans PHP n'est pas une nouvelle fonctionnalité, loin de là. Dans le lien suivant, vous verrez deux nouvelles fonctionnalités dans PHP 5.3 basées sur des exceptions. Le premier est constitué d'exceptions imbriquées et le second est un nouvel ensemble de types d'exceptions proposés par l'extension SPL (qui est maintenant une extension principale du moteur d'exécution PHP). Ces deux nouvelles fonctionnalités ont été intégrées au livre des meilleures pratiques et méritent d’être examinées en détail.

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

0
HMagdy