PHP обертка ошибок? - PullRequest
       2

PHP обертка ошибок?

3 голосов
/ 07 августа 2009

Я не знаю, правильно ли я использую термин, но я ищу что-то похожее на то, что вы получаете с Zend Server. Взгляните на это .

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

Ответы [ 2 ]

3 голосов
/ 07 августа 2009

Я не знаю ни одного инструмента, который сделает это автоматически для вас; но это не сложно развить, я думаю ... Тем не менее, я признаю, это займет у вас некоторое время: - (

Просто, чтобы добавить несколько заметок, лучшее решение, которое приходит мне в голову, чтобы регистрировать ошибки:

  • зарегистрируйте свой собственный обработчик ошибок с помощью set_error_handler
  • код функции, чтобы она регистрировала ошибки + данные GET / POST
    • возможно, это можно / нужно / нужно сделать в какой-то базе данных или структурированном файле (База данных SQLite, может быть: легкая, быстрая, простая в использовании, не зависит от внешнего сервера БД,. ..) , а не просто файлы; было бы легче иметь дело позже.
  • разработать приложение "отчетности" ...
    • Это то, что займет некоторое время, как вы сказали ...


Используя пример, приведенный на странице руководства, что-то вроде этого, вероятно, подойдет: во-первых, объявите вашу функцию обработки ошибок:

function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    $str = '';
    switch ($errno) {
        case E_USER_ERROR:
            $str .= "<b>My ERROR</b> [$errno] $errstr<br />\n";
            $str .= "  Fatal error on line $errline in file $errfile";
            $str .= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
            break;
        case E_USER_WARNING:
            $str .= "<b>My WARNING</b> [$errno] $errstr<br />\n";
            break;
        case E_USER_NOTICE:
            $str .= "<b>My NOTICE</b> [$errno] $errstr<br />\n";
            break;
        default:
            $str .= "Unknown error type: [$errno] $errstr<br />\n";
            break;
    }
    $str .= print_r($_GET, true);

    $str .= "\n";
    file_put_contents(dirname(__FILE__) . '/log.txt', $str, FILE_APPEND);

    /* Don't execute PHP internal error handler */
    return true;
}

Он получает информацию об ошибке, подготавливает некоторые конкретные сообщения об ошибках, которые зависят от типа ошибки, и помещает все это и дамп $_GET в файл.
(Конечно, ваш веб-сервер должен иметь возможность создавать / записывать в этот файл)


Затем вы регистрируете этот обработчик:

$old_error_handler = set_error_handler("myErrorHandler");


И, наконец, просто для проверки вы запускаете несколько ошибок:

trigger_error("test of E_USER_ERROR", E_USER_ERROR);
trigger_error("test of E_USER_WARNING", E_USER_WARNING);
trigger_error("test of E_USER_NOTICE", E_USER_NOTICE);


Теперь, при условии, что вы вызываете страницу примерно так: http://tests/temp/temp.php?a=10&test=glop&hello=world; вы получите журнал ошибок, содержащий это:

$ cat log.txt
<b>My ERROR</b> [256] test of E_USER_ERROR<br />
  Fatal error on line 34 in file /home/squale/developpement/tests/temp/temp.php, PHP 5.3.0RC4 (Linux)<br />
Array
(
    [a] => 10
    [test] => glop
    [hello] => world
)

<b>My WARNING</b> [512] test of E_USER_WARNING<br />
Array
(
    [a] => 10
    [test] => glop
    [hello] => world
)

<b>My NOTICE</b> [1024] test of E_USER_NOTICE<br />
Array
(
    [a] => 10
    [test] => glop
    [hello] => world
)

В этом случае это довольно уродливый беспорядок ... Но вы, наверное, видите смысл; теперь, до вас, чтобы развить это, чтобы получить именно то, что вы хотите; -)


Конечно, теперь вам также нужно разработать интерфейс отчетности (удобный, быстрый, удобный и все такое ...); вероятно, это будет самая длинная часть, которую нужно поставить : - (

И, к сожалению, я не знаю ни одного инструмента, который мог бы вам помочь ...
(Может быть, если вы начнете что-то разрабатывать, это может быть выпущено как открытый исходный код? Это, вероятно, окажется полезным для других ;-) Меня могут заинтересовать некоторые проекты, и я уверен, что не один ;-))

Все же, получайте удовольствие!

2 голосов
/ 07 августа 2009

Я не знаю ни одного бесплатного инструмента для анализа и отображения журналов ошибок PHP.

Я написал функции ведения журнала для нескольких проектов, используя set_error_handler () и set_exception_handler () .

Мои классы-обработчики в основном выполняют print_r () из _GET, _POST, _SERVER, _COOKIE, _SESSION и т. Д., А также отправляют мне по электронной почте / SMS Работает нормально большую часть времени. И мне нравится получать быстрые уведомления об ошибках. (так что я могу быстро это исправить).

Вы отметили пробел в инструментах сообщества для PHP. Кто-то должен запустить проект для регистрации ошибок с красивым интерфейсом для анализа / отображения журналов. Хм ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...