Из моего опыта вы можете отлавливать все типы ошибок, скрывать сообщение об ошибке по умолчанию и отображать собственное сообщение об ошибке (если хотите). Ниже перечислены вещи, которые вам нужны.
1) Сценарий начального / верхнего уровня, назовем его index.php
, где вы храните пользовательские функции обработчика ошибок. Обработчики пользовательских функций ошибок должны оставаться наверху, чтобы они улавливали ошибки под ними, под словом «ниже», которое я имею в виду во включаемых файлах.
2) Предположение, что этот топ-скрипт не содержит ошибок, должно быть верным! это очень важно, вы не можете поймать фатальные ошибки в index.php
, когда ваша пользовательская функция обработчика ошибок найдена в index.php
.
3) Php директивы (также должны быть найдены в index.php
)
set_error_handler("myNonFatalErrorHandler");
# чтобы ловить несмертельные ошибки
register_shutdown_function('myShutdown');
# чтобы поймать фатальные ошибки
ini_set('display_errors', false);
# для того, чтобы скрыть ошибки, отображаемые пользователю по php
ini_set('log_errors',FALSE);
# при условии, что мы регистрируем ошибки сами
ini_set('error_reporting', E_ALL);
# Мы хотим сообщать обо всех ошибках
во время производства (если я не ошибаюсь) мы можем оставить ini_set('error_reporting', E_ALL);
как есть, чтобы иметь возможность регистрировать ошибки, в то же время ini_set('display_errors', false);
будет следить за тем, чтобы пользователю не отображалось никаких ошибок.
Что касается фактического содержания двух функций, о которых я говорю, myNonFatalErrorHandler
и myShutdown
, я не помещаю здесь подробное содержание, чтобы упростить задачу. Кроме того, другие посетители привели много примеров. Я просто показываю очень простую идею.
function myNonFatalErrorHandler($v, $m, $f, $l, $c){
$some_logging_var_arr1[]="format $v, $m, $f, ".$err_lvl[$l].", $c the way you like";
//You can display the content of $some_logging_var_arr1 at the end of execution too.
}
function myShutdown()
{
if( ($e=error_get_last())!==null ){
$some_logging_var_arr2= "Format the way you like:". $err_level[$e['type']].$e['message'].$e['file'].$e['line'];
}
//display $some_logging_var_arr2 now or later, e.g. from a custom session close function
}
для $ err_lvl это может быть:
$err_lvl = array(E_ERROR=>'E_ERROR', E_CORE_ERROR=>'E_CORE_ERROR', E_COMPILE_ERROR=>'E_COMPILE_ERROR', E_USER_ERROR=>'E_USER_ERROR', E_PARSE=>'E_PARSE', E_RECOVERABLE_ERROR=>'E_RECOVERABLE_ERROR', E_WARNING=>'E_WARNING', E_CORE_WARNING=>'E_CORE_WARNING', E_COMPILE_WARNING=>'E_COMPILE_WARNING',
E_USER_WARNING=>'E_USER_WARNING', E_NOTICE=>'E_NOTICE', E_USER_NOTICE=>'E_USER_NOTICE',E_STRICT=>'E_STRICT');