2012-05-24 2 views
2

Как я могу зарегистрировать фатальную ошибку, возникающую в call_user_func_array? Его внутри скрипта CLI, который работает как демон. Я хотел бы регистрироваться при возникновении ошибки, но вместо этого он всегда выдает сообщение об ошибке.ошибка регистрации в call_user_func_array()

вещи, которые я пытался, но не смог сделать его работу:

try {call_user_func_array()} catch (Exception $e) {do_log} 

или

ob_start(); 
try {call_user_func_array()} catch (Exception $e) {do_log} 

или

register_shutdown_function('shutdownFunction'); 

или

ini_set('error_log',$baseDir.'/Jobque_error.log'); 
fclose(STDIN); 
fclose(STDOUT); 
fclose(STDERR); 
$STDIN = fopen('/dev/null', 'r'); 
$STDOUT = fopen($baseDir.'/Jobque_application.log', 'ab'); 
$STDERR = fopen($baseDir.'/Jobque_daemon.log', 'ab'); 

ответ

1

Вы не можете получить фатальную ошибку. Это смертельно, так что ваш сценарий умирает, и вы ничего не можете с этим поделать.

На самом деле функция, зарегистрированная через register_shutdown_handler, по-прежнему выполняется, но вы не можете получить обратную трассировку и т. Д., Так что это бесполезно.

Единственное возможное ведение фатальной ошибки - установка log_errors php.ini.

+1

Сад факты жизни. – SunWuKung

+0

Я знаю, что это старый поток, но да, вы можете * уловить фатальную ошибку. Используйте 'error_get_last()' внутри функции, которую вы передаете 'register_shutdown_handler()'. 'error_get_last()' дает ассоциативный массив деталей ошибок. Если его свойство 'type' равно' E_ERROR', это была фатальная ошибка, которая была поймана. Это работает с PHP 5.2. – curtisdf

Смежные вопросы