PHP5.6服务器上没有捕获异常

时间:2016-10-03 09:24:56

标签: php exception error-handling

我对目前正在开发的网络应用程序感到困惑。我决定更加谨慎地使用异常和try / catch-blocks

尽管如此;我使用PHP7 在本地开发,当我刚刚将应用程序上传到 PHP5服务器时,所有这些异常都不会被捕获。相反,脚本执行因致命错误而停止。我已经阅读了有关PHP7异常的重大变化,但我发现的所有信息都非常模糊。

脚本停止并不是一个问题,但在这种情况下捕获和“修改”错误非常重要,因为脚本是由AJAX调用运行的,并且必须返回JSON格式的错误消息。

主档案

try {

    if (!$this->validateNonce($this->postParams['upload-nonce']))
    throw new Exception('Upload failed because nonce could not be verified.');

    new FloImage(
        $this->postParams['basename'],
        true,
        $this->fileParams['uploadfile']
    );

} catch (Throwable $e) {

    echo json_encode(array('error' => $e->getMessage()));
    die();

}

FloImage()会检查一些信息(名称,文件大小等),如果出现错误,会以这种方式抛出异常:

throw new Exception(_('My error message.'));

有关如何使用PHP5进行try-catch-block工作的帮助将不胜感激!提前谢谢你......

2 个答案:

答案 0 :(得分:1)

Throwable是PHP7中引入的接口。从它所说的manual

  

Throwable是可以通过PHP 7中的throw语句抛出的任何对象的基本接口,包括错误和异常。

因此,如果您想在PHP5中使用代码,则必须捕获Exception本身。即。

try {
    throw new Exception('Some exception');
}
catch (\Exception $e) // use the backslash to comply with namespaces
{
    echo($e->getMessage());
    die();
}

只要抛出的异常来自Exception,这将有效。即

class SpecialException extends Exception {}

try {
    throw new SpecialException('Some exception');
}
catch (\Exception $e) // use the backslash to comply with namespaces
{
    echo($e->getMessage());
    die();
}

答案 1 :(得分:0)

可能您正在寻找用于编写用户定义的错误处理函数的set_error_handler()。因此,将错误处理程序设置在脚本执行的顶部。

不要忘记将restore_error_handler()放在脚本的末尾以恢复以前的错误处理函数。

您可以在 set_error_handler()功能中相应地恢复脚本。