Уровень у этих директив PHP_INI_ALL (есть исключение для XMLRPC ошибок -- они PHP_INI_SYSTEM)
Директивы можно ставить в рантайм by ini_set, а error_reporting мы можем поставить by error_reporting()
Директивы:
1)
error_reporting = E_ALL & E_STRICT;
если ей поставить -(минус)1, то будут отображаться все ошибки, даже те которые еще не выделы в отдельный класс и появятся в будущем.
Есть ошибки ядра(E_CORE_*), парсинга(E_PARSE), компиляции(E_COMPILE_*) -- эти ошибки никак нельзя отлавливать и обрабатывать кодом пхп (не факт о E_PARSE), можно только констатировать их факты в логах. А есть юзерские(E_USER_*) их мы можем бросать искуственно by trigger_error(псевдоним user_error). И есть не юзерские, но мы их можем отлавливать и пытаться с ними справиться (E_ERROR, E_WORNING, E_DEPRECATED)
2) error_log -- указываем путь к файлу логов.
3) track_errors -- делает так, что мы в глобальную переменную $php_errormsg попадают ошибки даже от функций с глушением ошибок ( @count(56) ). Мы всегда можем проверить эту переменную и нащупать последнюю ошибку.
и другие директивы...
Функции обработки ошибок
debug_backtrace -- возвращает массив обьектов с путем по сработавших функциям от последней, с информацией о файлах, строках и т.д.
debug_print_backtrace -- распечатывает в удобнов виде трей.
error_get_last -- возвращает массив с уже случившимися ошибками, каждая ошибка описана более подробно чем в функции $php_errormsg(эта переменная строка, а элемент массива тоже массив)
error_log -- отправить ошибки в иной лог чем определено в директиве, может быть другой файл, сокет, на почту и т.д.Это определяется опциональным параметром message_type
set_error_handler -- до станадартного обработчика ошибки вызывается наш колбек, если мы хотим, чтобы стандартный вообще не сработал нужно возвратить true с колбека, но нужно помнить, что мы обойдем не только стандартный обработчик, но и продолжим выполнение скрипты с места возникновения ошибки дальше. Поэтому если это недопустимо нужно в колбеке вызвать функцию дай. Чтобы наш собственный обработчик не реагировал на некоторые ошибки(подобно тому как стандартный фильтрируется by error_reporting), мы должны задать опциональную интеджерную маску.
set_exception_handler -- если мы не словили трайкетчем какойто эксепшин наш колбек его получит в виде параметра. После срабатывания нашего колбека мы никогда не сможем продолжить работу скрипта с места возникновения ошибки дальше.
restore_error_handler, restore_exception_handler -- востанавливают обработчики, которые стояли до последнего их изменения by set_*_handler
trigger_error(or alias user_error) -- можем сами сгенерировать ошибку типа E_USER_*.
throw $excObj -- а так генерируем собственные исколючения.
Работа с ошибками это подход пхп4, с исключениями - пхп5. Мы можем с легкостью перевести работу ошибок в русло исколючений так:
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}set_error_handler("exception_error_handler");
Это SPL-ный класс, наследник Exception
Комментариев нет:
Отправить комментарий