在 PHP 中尝试 catch 语句,其中文件不上载

2022-08-30 14:12:15

我了解 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!';
}

这可能不是一个很好的例子,但任何帮助将不胜感激。


答案 1

你可以这样做。

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{} 调用的函数/方法中),它们将向上传播。


答案 2

好吧,如果你想使用异常,你可以做这样的事情:

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

我知道这可能看起来像膨胀 - 但您可以从调用堆栈中的任何位置调用该方法,并在任何时候捕获异常。


推荐