Я ищу общий способ для выполнения некоторого кода при каждой ошибке/предупреждении и т.д.
У меня есть несколько веб-сайтов с одинаковой кодовой базой, и я хотел бы собрать все ошибки в одном централизованном месте. Для этого мне нужен обратный вызов, который вызывается каждый раз, когда возникает ошибка.
Можно ли добиться этого, используя только PHP (код или конфигурацию), или мне нужно перейти на уровень веб-сервера?
Следующие типы ошибок не могут быть обработаны с помощью определяемой пользователем функции в set_error_handler()
: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING и большая часть E_STRICT возникает в файле, где вызывается set_error_handler().
Короче говоря, нет. Если PHP дает сбой (и, таким образом, генерирует ошибку), нет простого способа собрать эту ошибку, потому что вызванный скрипт остановится после того, как обнаружит ошибку.
set_error_handler()
каким-то образом решает эту проблему, но многие типы ошибок (E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING и большинство E_STRICT) не будут обнаружены таким образом.
Если ошибки создаются классами и методами, создающими исключения, перехватите как можно больше с помощью структур try{} catch{}
.
Возможно, вы могли бы настроить свою среду так, чтобы каждый вызов PHP на самом деле был вызовом файла master-PHP, который затем выполняет PHP-скрипты, собирает выходные данные и отображает их пользователю, но это слишком много ненужной сложности.
Если вы используете AJAX-среда (где вызовы PHP осуществляются через вызовы AJAX, а не изменения в URL-адресе), вы можете настроить прослушиватель JavaScript, который улавливает неожиданные результаты и сохраняет их. Вот как я это делаю в настоящее время.
Я хотел бы услышать от других, есть ли какие-либо другие приемы для обнаружения ошибок.
set_error_handler()