Джино: хостинг и веб-сервисы

Система Orphus
Russian version
Добавить на Del.icio.us
English version
Добавить на Digg.com

 dkLab | Конструктор | PHP_Exceptionizer: преобразование E_NOTICE в исключения (Exception) 

Карта сайта :: Форум «Лаборатории» :: Проект «Денвер»
Проект «Orphus» :: Куроводство: наблы :: Конструктор


2009-01-21
Обсудить на форуме

Принять участие в разработке библиотеки/утилиты можно на GitHub.

Простая, но весьма полезная библиотека PHP_Exceptionizer позволяет преобразовывать нотисы (E_NOTICE), предупреждения (E_WARNING) и т. д. в исключения PHP.

Пример использования

Листинг 1
// Где-то в начальном коде инициализации скрипта.
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_NOTICE, то поймаете и E_WARNING тоже:
try {
    fopen("non-existed", "r");
} catch (E_NOTICE $e) {
    echo "Warning or worse raised: " . $e->getMessage();
}
...
// А можно и не ловить, тогда нотис вызовет завершение программы.
echo $undefinedVariable;

Польза при отладке скриптов

Библиотеку очень удобно использовать при разработке веб-скриптов. Как известно, ее лучше проводить в режиме error_reporting = E_ALL и держа в уме, что даже малейший нотис при разработке — намек на фатальную ошибку.

Чайник 

Типичный пример, когда нотисы могут потеряться, — скрипты, генерирующие редирект на другую страницу. Это проявляется при включенной буферизации выходного потока (ob_start()).

Конечно же, на "боевом" сервере лучше нотисы в исключения не преобразовывать (дабы не делать из мухи слона), а просто читать их в лог-файлах.

Польза при генерации массовых рассылок

Представьте, что вы написали скрипт, который рассылает письма нескольким миллионам подписчиков сайта, и текст письма генерируется динамически, в зависимости от профиля пользователя или его друзей. Вы можете поймать себя на мысли, что запускать этот скрипт очень страшно... Вдруг там произойдет какая-то ошибка, и миллион человек увидят пустые поля или "скомканное" письмо?

PHP_Exceptionizer позволяет заметно снизить этот риск, если вы включите ее в момент генерации письма.







Дмитрий Котеров, Лаборатория dk. ©1999-2016
GZip
Добавить на Del.icio.us   Добавить на Digg.com   Добавить на reddit.com