Могу ли я использовать Zend Log для обработки ошибок PHP?
Я разрабатываю веб-сервис с Zend, более конкретно я Zend_Amf для взаимодействия с Adobe Flex. Проблема с этим заключается в том, что я не могу легко увидеть ошибки PHP, потому что отладчик Flex не будет отображать фактические ответы с сервера, если они не являются правильными Amf. Если я посещаю конечную точку Zend_Amf с помощью веб-браузера, я не получаю никаких ошибок, поэтому ошибка возникает при выполнении обработчика Amf. Прямо сейчас я использую firebug для проверки HTTP-трафика, Чтобы увидеть любые ошибки.
К моему вопрос: Могу ли я использовать утилиту log (например, Zend_Log) для регистрации всех ошибок PHP, предупреждений и уведомлений в файл вместо (или в дополнение к) отправки их в HTTP-ответе?
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 во время начальной загрузки и использую его для регистрации ошибок в контроллере ошибок.