Очень простая, но полезная библиотека PHP_Exceptionizer позволяет преобразовывать нотисы (E_NOTICE), предупреждения (E_WARNING) и т. д. в исключения PHP.
Библиотеку удобно использовать при разработке и отладке. Как известно, ее лучше проводить в режиме error_reporting = E_ALL и держа в уме, что даже малейший нотис при разработке — намек на фатальную ошибку.
Типичный пример, когда нотисы могут потеряться, — скрипты, генерирующие редирект на другую страницу. Это проявляется при включенной буферизации выходного потока (ob_start()).
Конечно же, на «боевом» сервере лучше нотисы в исключения не преобразовывать (дабы не делать из мухи слона), а просто читать их в лог-файлах.
Однако существует случай, когда библиотеку имеет смысл включать и в продакшен-режиме. Это — система генерации рассылок. Представьте, что вы написали скрипт, который рассылает письма нескольким миллионам подписчиков сайта, и текст письма генерируется динамически, в зависимости от профиля пользователя или его друзей. Вы можете поймать себя на мысли, что запускать этот скрипт очень страшно… Вдруг там произойдет какая-то ошибка, и миллион человек увидят пустые поля или «скомканное» письмо? PHP_Exceptionizer позволяет заметно снизить этот риск, если вы включите ее в момент генерации письма.
Скачать библиотеку можно тут: dklab.ru/lib/PHP_Exceptionizer
// Где-то в начальном коде инициализации скрипта. error_reporting(E_ALL); if (<is debug mode active>) { $exceptionizer = new PHP_Exceptionizer(E_ALL); // И оставьте эту переменную, чтобы она не удалялась до окончания // скрипта. Удаление переменной вызовет отключение PHP_Exceptionizer. } ... // Далее можно ловить нотисы как исключения: try { echo $undefinedVariable; } catch (E_NOTICE $e) { echo "Notice raised: " . $e->getMessage(); } ... // Если вы ловите E_WARNING, то поймаете и E_NOTICE тоже: try { echo $undefinedVariable; } catch (E_WARNING $e) { echo "Warning or better raised: " . $e->getMessage(); } ... // А можно и не ловить, тогда нотис вызовет завершение программы. echo $undefinedVariable;
Библиотеку удобно использовать при разработке и отладке. Как известно, ее лучше проводить в режиме error_reporting = E_ALL и держа в уме, что даже малейший нотис при разработке — намек на фатальную ошибку.
Типичный пример, когда нотисы могут потеряться, — скрипты, генерирующие редирект на другую страницу. Это проявляется при включенной буферизации выходного потока (ob_start()).
Конечно же, на «боевом» сервере лучше нотисы в исключения не преобразовывать (дабы не делать из мухи слона), а просто читать их в лог-файлах.
Однако существует случай, когда библиотеку имеет смысл включать и в продакшен-режиме. Это — система генерации рассылок. Представьте, что вы написали скрипт, который рассылает письма нескольким миллионам подписчиков сайта, и текст письма генерируется динамически, в зависимости от профиля пользователя или его друзей. Вы можете поймать себя на мысли, что запускать этот скрипт очень страшно… Вдруг там произойдет какая-то ошибка, и миллион человек увидят пустые поля или «скомканное» письмо? PHP_Exceptionizer позволяет заметно снизить этот риск, если вы включите ее в момент генерации письма.
Скачать библиотеку можно тут: dklab.ru/lib/PHP_Exceptionizer