Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите с обработкой ошибок
Форумы портала PHP.SU » » Если скрипт не работает » Помогите с обработкой ошибок

Страниц (1): [1]
 

1. devel0per - 07 Апреля, 2016 - 14:25:05 - перейти к сообщению
Добрый день.
Как можно заставить php ловить в shutdownHandler только ошибки типа error, а warning игнорировать. Для приведенного ниже кода? Что бы скрипт продолжил работу если произошел warning без захода в shutdownHandler.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
  3.  
  4. register_shutdown_function('shutdownHandler');
  5.  
  6. @chmod('1234',0777);
  7.  
  8. function shutdownHandler()
  9. {
  10.   if( is_array($error = error_get_last()) )
  11.   {
  12.     $code = isset($error['type']) ? $error['type'] : 0;
  13.     $message = isset($error['message']) ? $error['message'] : '';
  14.     $file = isset($error['file']) ? $error['file'] : '';
  15.     $line = isset($error['line']) ? $error['line'] : '';
  16.  
  17.     if( $code > 0 )
  18.     {
  19.       $message .= PHP_EOL.'file: '.$file;
  20.       $message .= PHP_EOL.'line: '.$line;
  21.     }
  22.   }
  23. }
  24.  

(Добавление)
проверяю на 5.6.10
2. Мелкий - 07 Апреля, 2016 - 14:36:33 - перейти к сообщению
register_shutdown_function, что вполне очевидно следует из названия, вызывается только по завершении скрипта (нормальном или аварийном).
Чтобы не писать в лог варнинги, проверяйте type
3. devel0per - 07 Апреля, 2016 - 14:50:18 - перейти к сообщению
Мелкий пишет:
register_shutdown_function, что вполне очевидно следует из названия, вызывается только по завершении скрипта (нормальном или аварийном).
Чтобы не писать в лог варнинги, проверяйте type



register_shutdown_function использую для отлова fatal error, он ловит и ворнинги тоже. Если закомментировать строку с register_shutdown_function('shutdownHandler') скрипт игнорирует ворнинг в @chmod('1234',0777) и идет дальше. Но как только регистрируем register_shutdown_function('shutdownHandler') он прекращает работу на @chmod('1234',0777) и попадает shutdownHandler, а от туда возврата нет. А мне нужно чтобы shutdownHandler вызывался при фаталах, а ворниннги игнорировал. В документации ничего про это не нашел Огорчение
4. Мелкий - 07 Апреля, 2016 - 15:16:15 - перейти к сообщению
Ну давайте тренироваться на кошках. Немного порежу скрипт для компактности и добавлю вывод для проверки, что же происходит после вызова варнинга.

5.6.10, да?
CODE (bash):
скопировать код в буфер обмена
  1. melkij@melkij:~$ cat testshutdown.php
  2. <?php
  3. register_shutdown_function('shutdownHandler');
  4.  
  5. @chmod('1234',0777);
  6.  
  7. echo 'still alive',PHP_EOL;
  8.  
  9. function shutdownHandler() {
  10.     $error = error_get_last();
  11.     if( is_array($error)) {
  12.         var_dump($error);
  13.     }
  14. }
  15. melkij@melkij:~$ php-5.6.10 -f testshutdown.php
  16. still alive
  17. array(4) {
  18.   ["type"]=>
  19.   int(2)
  20.   ["message"]=>
  21.   string(34) "chmod(): No such file or directory"
  22.   ["file"]=>
  23.   string(29) "/home/melkij/testshutdown.php"
  24.   ["line"]=>
  25.   int(4)
  26. }

register_shutdown_function был вызван при завершении скрипта, а не от варнинга.
5. devel0per - 08 Апреля, 2016 - 09:56:39 - перейти к сообщению
Вы правы, я был не внимательным.
Спасибо!

 

Powered by ExBB FM 1.0 RC1