Очень простая, но полезная библиотека 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
