Как я могу уловить фатальную ошибку в PHP?

Я использую imagick для создания эскизов для PDF-документов. Я получаю фатальную ошибку на этой строке.

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

Я попробовал обернуть в try catch, но, как я понял, это не работает, потому что это фатальная ошибка, а не исключение. Как бы я изящно поймал эту ошибку?

Меня больше беспокоит использование PHP для обнаружения ошибки, чем решение проблемы с изображением, так как любое количество ошибок может возникнуть с помощью файлов pdf пользователя. благодаря!

К сожалению, невозможно получить фатальные ошибки в php. Это дано. Есть еще пара вещей, которые вы можете сделать:

  1. Функция, зарегистрированная с помощью register_shutdown_function() , все еще выполняется. Вы можете поместить свою ошибку в такую ​​функцию, и если readImage() успешным, зарегистрируйте пустую функцию.

  2. Вы можете поместить эскиз в сценарий командной строки php и выполнить его с помощью exec('php thngenerate.php ' . escapeshellarg($file .'[0]'), $out, $return_var); , Если $return_var != 0 , произошла ошибка.

  3. Подобно # 2, но скрипт вызывается с использованием http, на этот раз вы смотрите на ошибку внутреннего сервера.

Он должен отображаться в журналах ошибок сервера, которые могут дать вам представление о том, почему он не работает, и, надеюсь, предотвратить его в первую очередь. Помимо этого, это зависит от того, что вы пытаетесь сделать. Я использую мой для изменения размеров изображений и создания эскизов, поэтому мои проверки связаны с этим; Im imagick показывает правильные размеры и представляет собой миниатюру и имеет размер файла больше 0.

Вы можете установить собственный обработчик ошибок с помощью set_error_handler :

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