<?php
ini_set('display_errors', false);
ini_set('log_errors', false);
ini_set('error_reporting', E_ALL);
function myShutdown()
{
if (($e = error_get_last()) !== null && $e['type'] <> E_NOTICE) {
$arError = 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');
$resultText = $arError[$e['type']] . ' : ' . $e['message'] . $e['file'] . ' ' . $e['line'];
mail('admin@precord.ru', 'PHP Erorr!', $resultText);
}
}
register_shutdown_function('myShutdown');
// Пример:
$o = new Test1;
В приведенном примере происходит попытка создания экземпляра неопределенного класса — Test1. После выполнения этого скрипта на почту придет письмо примерно со следующим содержимым: E_ERROR : Class 'Tester1' not found script.php 24
Текст и заголовок письма конечно же можно изменить или записывать данные в специальный файл. Плюс отправки сообщения на почту, в том, что на него можно оперативно среагировать.
Массив $e
содержит следующие элементы:
type
– тип ошибки, в примере это E_ERROR, остальные типы приведены в массиве$arError
;message
– текст ошибки;file
– файл в котором произошла ошибка;line
– строка на которой произошла ошибка;