我如何在PHP中捕捉到一个想象中的致命错误

时间:2015-01-26 18:33:39

标签: php imagick

我正在使用imagick为pdf文档创建缩略图。我在这条线上遇到致命的错误..

$imagick->readImage($file .'[0]');

我尝试用try catch包装但是因为我知道这不起作用,因为它是致命的错误,不是例外。我怎样才能优雅地发现这个错误?

我更关心使用PHP来检测错误而不是解决imagick问题,因为用户pdf文件可能会出现任意数量的错误。谢谢!

3 个答案:

答案 0 :(得分:1)

不幸的是,在php中捕获致命错误是不可能的。这是给出的。你还可以做几件事:

  1. 仍然执行使用register_shutdown_function()注册的功能。您可以将错误函数放入此函数中,如果readImage()成功,则注册空函数。

  2. 您可以将缩略图生成放入php命令行脚本并使用exec('php thngenerate.php ' . escapeshellarg($file .'[0]'), $out, $return_var);执行它。如果$return_var != 0,则出现错误。

  3. 与#2类似,但是使用http调用脚本,这次你会看到内部服务器错误。

答案 1 :(得分:0)

它应该显示在服务器错误日志中,这可以让您深入了解它失败的原因,并希望首先防止它发生。除此之外,它取决于你想要做什么。我使用我来调整图像大小和创建缩略图,所以我的检查与此相关;想象力显示正确的尺寸,是否存在缩略图,文件大小大于0。

答案 2 :(得分:-1)

您可以使用set_error_handler设置自定义错误处理程序:

function exceptionErrorHandler($errno, $errstr, $errfile, $errline ) {    
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}

set_error_handler("exceptionErrorHandler");