2010-05-05 6 views
5

Я пишу протоколирования службы ошибок, которые будут интегрированы в веб-сайтов, работающих на моем сервере, который будет по электронной почте мне партии ошибок и т.д.Вход со смертельным исходом/разбора ошибок в PHP5

Так что я пытался найти если есть способ справиться с фатальными и синтаксическими ошибками, но не использовать трюки для обработки его в PHP-коде (выходной буфер, функция выключения). Я очень рад написать код C или что-то, что можно было бы обработать за пределами моего PHP-кода. Я также хотел бы сделать переадресацию, если это возможно (мои сайты используют буферизацию вывода, поэтому не должно быть никаких отправленных заголовков).

Я уверен, что это можно сделать с помощью PHP-модуля, но я никогда не писал его и понятия не имею, с чего начать.

ответ

3

Существует нет способа для уловить фатальную или синтаксическую ошибку в PHP. Но ..

В 5.2 они добавили error_get_last(). Вы можете вызвать его внутри функции выключения и выполнить регистрацию. Непроверенный 5,3 Пример для стреляя почту, когда произошла роковая ошибка:

<?php 
register_shutdown_function(function(){ 
    $err = error_get_last(); 
    if(is_array($err) && array_key_exists('type', $err) $err['type'] > 0 
     && ($err['type'] == E_ERROR || $err['type'] == E_PARSE) { 
     error_log("Oh noes, a fatal: " . var_export($err, true), 1, '[email protected]'); 
    } 
}); 

(. Вы должны будете использовать обратный вызов, если вы не на 5.3 и не можете делать анонимные функции)

К сожалению, поскольку это связано с функцией выключения, возможно, что заголовки уже выпущены, и вы не сможете предоставить ничего полезного пользователю. Однако это зависит от остальной части приложения, поэтому это может сработать для вас. Попробуйте и узнайте!

+0

Я ясно дал понять в своем вопросе, что не пытаюсь поймать ошибки с помощью этих трюков PHP, мне просто нужно их зарегистрировать и обработать. Использование PHP-модуля представляется наиболее вероятным способом, но я не могу найти много информации об обработке ошибок в PHP-модулях. – PeterBelm

+0

Я также дал понять, что вы не можете поймать, но вы можете войти в систему. :) – Charles

+0

действительно работал для меня - также неправильный синтаксис кода –

1

По умолчанию все ошибки передаются в журнал ошибок веб-сервера, но вы можете изменить его в php.ini, указав путь к своему собственному файлу via error_log setting. Итак, что нужно сделать, это написать отдельный скрипт/приложение для разбора/отправки данных/обрезания файла журнала каждый день/независимо от того, и запускать его как задание cron.

+0

Единственная проблема с этим в том, что я не смог бы отправить перенаправление. Я думаю, что с помощью PHP-модуля я смог бы добиться этого. – PeterBelm

 Смежные вопросы

  • Нет связанных вопросов^_^