Могу ли я использовать Zend_Log для обработки ошибок PHP?
-
25-09-2019 - |
Вопрос
Я разрабатываю веб-сервис с помощью Zend, точнее, я Zend_Amf для взаимодействия с Adobe Flex.Проблема в том, что мне нелегко увидеть ошибки PHP, потому что отладчик Flex не отображает фактические ответы с сервера, если они не являются правильными Amf.Если я посещаю конечную точку Zend_Amf с помощью веб-браузера, я не получаю никаких ошибок, поэтому ошибка возникает при выполнении обработчика Amf.Прямо сейчас я использую Firebug для проверки HTTP-трафика на наличие ошибок.
На мой вопрос:Могу ли я использовать утилиту журнала (например, Zend_Log) для регистрации всех ошибок PHP, предупреждений и уведомлений в файл вместо (или в дополнение к) отправке их в ответе HTTP?
Решение
вы можете использовать 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');
Стоит отметить, что даже объединив оба метода, он не сможет обнаружить все ошибки, например ошибки синтаксиса....Но вы могли увидеть такую ошибку, используя обычный браузер.
Другие советы
Я не уверен, что мое решение поможет вам здесь. Но если вы замените приложение, из-за исключения был брошен, и запущен ErrumerController по умолчанию. Тогда вы можете взглянуть на http://blog.elinkmedia.net.au/2009/10/23/auplation-logging-with-zend_log/
Я в основном зарегистрировал экземпляр регистратора во время загрузки и использую его для ошибок ошибок в контроллере ошибок.