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

时间:2009-05-31 23:11:16

标签: php exception-handling try-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!";
}

这可能不是一个很好的例子,但任何帮助都会受到赞赏。

6 个答案:

答案 0 :(得分:50)

你可以这样做。

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

答案 1 :(得分:9)

好吧,如果你想使用例外,你可以这样做:

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

我知道这看起来很臃肿 - 但你可以从调用堆栈的任何地方调用该方法,并在任何时候捕获异常。

答案 2 :(得分:7)

try-catch语句用于处理异常。我不相信函数move_uploaded_files可以抛出和异常,因此我认为你编写的代码是正确的。通话结束后,查看返回代码。如果它是假的,则结束处理,否则报告成功。

答案 3 :(得分:3)

根据PHPbug中的类似帖子,只有OO代码(面向对象的代码)会抛出异常。这意味着诸如move_uploaded_file之类的函数不会抛出自己的异常,但其他一些代码也会抛出。

答案 4 :(得分:2)

我发现this有帮助。

应用异常处理和尝试捕获内容的一个很好的例子是here

答案 5 :(得分:0)

您必须查看[PHP 5.3中的异常最佳实践] [1]

PHP中的异常处理不是任何延伸的新功能。在以下链接中,您将看到PHP 5.3中基于异常的两个新功能。第一个是嵌套异常,第二个是SPL扩展提供的一组新的异常类型(现在是PHP运行时的核心扩展)。这两个新功能都已进入最佳最佳实践,并值得详细研究。

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