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


Exception not caught on PHP5.6 server

我现在正在开发一个web应用程序。我决定在和try/catch-block 一起使用Exceptions。

不过;我使用PHP7在本地开发了,当我刚刚将应用程序上传到PHP5服务器时,所有这些异常都不再被捕获。相反,脚本执行会因为一个致命错误而停止。我读了一些关于PHP7异常的主要变化,但我发现的所有信息都非常模糊。

script -stop不是太大的问题,但是在这种情况下捕获和"修改"错误是非常重要的,因为脚本是由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.'));
关于如何使try-catch块与PHP5工作的帮助将不胜感激!

Throwable是PHP7中引入的一个接口。手册上写着:

Throwable是PHP 7中可以通过throw语句抛出的任何对象的基接口,包括Error和Exception。

因此,如果你想在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();
}

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

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

您可以在set_error_handler()函数中相应地恢复您的脚本。

相关文章: