Могу ли я использовать Zend Log для обработки ошибок PHP?


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

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

2 4

2 ответа:

Вы можете использовать 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');

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

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

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