error_reporting(0);
ini_set('error_reporting','0');
ini_set('display_errors', '0');
ini_set('display_startup_errors', '0');
ini_set('ignore_repeated_errors', '1');
function err($type, $msg, $file, $line)
{
$file=' /'.basename($file).':';
file_put_contents('errors.php', ' - '.$type.' - '.$msg.$file.$line."\n", FILE_APPEND);
//exit(" 503 Сайт временно недоступен.");
}
function r_err()
{
$error = error_get_last();
if(isset($error['type']) && $error['type']==E_ERROR)
{
//if(!function_exists('err'))echo 'NO'; else echo 'YES';
err('E_ERROR', $error['message'], $error['file'], $error['line']);
}
}
register_shutdown_function('r_err');
set_error_handler('err');
echo $s+A;// первые две ошибки (несуществующая переменная и константа)
function query($query)
{
if ($result=mysql_query($query)) return $result;
else trigger_error(mysql_error());
}
// 3 ошибка qu2ery - неизвестная функция
if($tr2=qu2ery("SELECT `p` FROM `tab` WHERE `id_p`='1' LIMIT 1"))
{
$tr2_i=mysql_fetch_assoc($tr2);
echo $tr2_i['partition'];
}
// 4 ошибка - несуществующее поле `p`
Если 3 ошибку не делать, то ловится 1,2 и 4, как и должно быть
Если сделать 3 ошибку, делается только 1 и 2 (само собой 4 не должна т.к. 3 критичная)
Но почему function r_err() не передает данные в function err()!!! Внутри проверяю, она определена, даже если тупо написать внутри r_err():
file_put_contents('errors.php', '111111111', FILE_APPEND);
то тоже не работает, но если написать echo '11111111'; то работает выводит на экран 111111111.
Почему после прекращения работы скрипта, сработывающая (т.к. register_shutdown_function('r_err');
) r_err() отказывается заносить инфу в файл???
Сижу уже 4 часа с двумя строчками.
Спустя 2 часа, 31 минута, 51 секунда (15.06.2012 - 10:42) killer8080 написал(а):
Цитата |
Замечание: На некоторых веб-серверах рабочая директория скрипта может измениться внутри завершающей функции, например, Apache. |
Спустя 1 минута, 12 секунд killer8080 написал(а):
A.B.C.
всегда используй полные пути

Спустя 10 минут, 23 секунды (15.06.2012 - 10:52) GET написал(а):
killer8080
+1000! Спасибо!!!
+1000! Спасибо!!!
Спустя 9 минут, 54 секунды (15.06.2012 - 11:02) GET написал(а):
Хотел еще спросить.
Вот если прикрутить к E_ERROR такой кусок:
Корректно ли увеличивать память?
И как можно имитировать такую ошибку? И почему E_PARSE будет работать только для инкюдиемых файлов?
Вот если прикрутить к E_ERROR такой кусок:
|| $error['type'] == E_PARSE || $error['type'] == E_COMPILE_ERROR))
{
if (strpos($error['message'], 'Allowed memory size') === 0)
{// если кончилась память
ini_set('memory_limit', (intval(ini_get('memory_limit'))+64)."M"); // выделяем немножко что бы доработать корректно
Log::error("PHP Fatal: not enough memory in ".$error['file'].":".$error['line']);
}
else
{
Log::error("PHP Fatal: ".$error['message']." in ".$error['file'].":".$error['line']);
}
// ... завершаемая корректно ....
}
Корректно ли увеличивать память?
И как можно имитировать такую ошибку? И почему E_PARSE будет работать только для инкюдиемых файлов?
Спустя 1 час, 22 минуты, 33 секунды (15.06.2012 - 12:25) killer8080 написал(а):
A.B.C.
если ошибка возникла из-за нехватки памяти, то дергать ini_set() уже поздно. Кстати не факт что шатдаоун функция вообще будет вызвана.
ИМХО лучший вариант - буферизация вывода, и предварительное резервирование памяти в переменной.
если ошибка возникла из-за нехватки памяти, то дергать ini_set() уже поздно. Кстати не факт что шатдаоун функция вообще будет вызвана.
ИМХО лучший вариант - буферизация вывода, и предварительное резервирование памяти в переменной.
Спустя 13 минут, 45 секунд (15.06.2012 - 12:39) GET написал(а):
Понятно. Спасибо еще раз.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.