Вход фатальных / ошибок анализа в PHP5

Я пишу сервис регистрации ошибок, который будет интегрирован в веб-сайты, работающие на моем сервере, который пошлет мне по электронной почте ошибочные пакеты и т.д.

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

Я вполне уверен, это могло быть сделано с модулем PHP, но я никогда не писал один и понятия не имею, где запустить.

5
задан Charles 23 December 2012 в 21:44
поделиться

2 ответа

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

1
ответ дан 15 December 2019 в 00:53
поделиться

Невозможно поймать фатальную ошибку или ошибку синтаксического анализа в 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, 'fatals@example.com');
    }
});

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

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

3
ответ дан 15 December 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: