Могу ли я использовать Zend_Log для обработки ошибок PHP? - PullRequest
4 голосов
/ 03 февраля 2010

Я разрабатываю веб-сервис с Zend, точнее, я Zend_Amf для взаимодействия с Adobe Flex. Проблема в том, что я не могу легко увидеть ошибки PHP, потому что отладчик Flex не будет отображать фактические ответы с сервера, если они не являются правильными Amf. Если я посещаю конечную точку Zend_Amf через веб-браузер, я не получаю никаких ошибок, поэтому ошибка возникает при выполнении обработчика Amf. Сейчас я использую firebug для проверки HTTP-трафика на наличие ошибок.

На мой вопрос: могу ли я использовать утилиту журнала (например, Zend_Log) для записи всех ошибок PHP, предупреждений и уведомлений в файл вместо (или в дополнение к) отправки их в ответе HTTP?

Ответы [ 2 ]

2 голосов
/ 03 февраля 2010

вы можете использовать set_error_handler для перехвата ошибок PHP и использовать Zend_Log, чтобы регистрировать их, как вам угодно.

Единственная проблема с этой функцией - она ​​не перехватывает все ошибки PHP, невозможно отлавливать такие ошибки, как синтаксические ошибки ....

Другой способ - использовать функцию register_shutdown_function

как это:

error_reporting(E_ALL);
    ini_set('display_errors', 0);

    function shutdown(){
        $isError = false;
        if ($error = error_get_last()){
            switch($error['type']){
                case E_ERROR:
                case E_CORE_ERROR:
                case E_COMPILE_ERROR:
                case E_USER_ERROR:
                    $isError = true;
                    break;
            }
        }

        if ($isError){
            echo "Script execution halted ({$error['message']})";
        } else {
            echo "Script completed";
        }
    }

    register_shutdown_function('shutdown');

Стоит отметить, что даже если объединить оба метода, он не будет перехватывать все ошибки, например, ошибки синтаксиса ... Но вы можете увидеть такие ошибки, используя обычный браузер.

0 голосов
/ 11 февраля 2010

Я не уверен, что мое решение поможет вам здесь.Но если ваше приложение завершает работу из-за исключительной ситуации и запускается errorController по умолчанию.Тогда вы можете захотеть взглянуть на http://blog.elinkmedia.net.au/2009/10/23/application-logging-with-zend_log/

Я в основном зарегистрировал экземпляр регистратора во время начальной загрузки и использовал его для регистрации ошибок в контроллере ошибок.

...