在文件未上传的 PHP 中尝试 catch 语句

Posted

技术标签:

【中文标题】在文件未上传的 PHP 中尝试 catch 语句【英文标题】:try catch statement in PHP where the file does not upload 【发布时间】:2010-10-30 07:18:41 【问题描述】:

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

这可能不是一个很好的例子,但我们将不胜感激。

【问题讨论】:

另见:***.com/questions/1087365 【参考方案1】:

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

【讨论】:

他的例子是正确的,但我认为重点是他试图了解异常而不是试图修复/改进示例代码。 感谢大家的快速回复!这似乎不是最好的学习例子。那么什么时候是使用异常的好时机呢?【参考方案2】:

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

【讨论】:

【参考方案3】:

你可以这样做。

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 调用的函数/方法中)并且它们会向上传播。

【讨论】:

感谢您的回复和解答!我知道这不是一个很好的例子。什么时候适合使用异常?谢谢! 我不认为有好的或坏的例子。 Try/Catch 语句在有用时很有用。唯一需要注意的是,当函数被滥用时,php 会抛出 E_ERROR 或 E_WARNING。【参考方案4】:

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

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

我知道这可能看起来很臃肿 - 但您可以从调用堆栈中的任何位置调用该方法,并随时捕获异常。

【讨论】:

请注意,如果您的异常具有类层次结构,则异常处理会更加有用。将 catch 与特定的 Exception 子类一起使用通常很有用,这样您就可以选择在代码的哪个级别处理哪些问题。

以上是关于在文件未上传的 PHP 中尝试 catch 语句的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP Try Catch 块中抛出异常

PHP 表单元素未显示。

php:try-catch 未捕获所有异常

文件未上传到php

Catch 中的语句未执行[重复]

文件已上传到文件夹但路径未存储到数据库中