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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите с обработкой ошибок

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
devel0per
Отправлено: 07 Апреля, 2016 - 14:25:05
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Добрый день.
Как можно заставить 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
 
 Top
Мелкий Супермодератор
Отправлено: 07 Апреля, 2016 - 14:36:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




register_shutdown_function, что вполне очевидно следует из названия, вызывается только по завершении скрипта (нормальном или аварийном).
Чтобы не писать в лог варнинги, проверяйте type


-----
PostgreSQL DBA
 
 Top
devel0per
Отправлено: 07 Апреля, 2016 - 14:50:18
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Мелкий пишет:
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 вызывался при фаталах, а ворниннги игнорировал. В документации ничего про это не нашел Огорчение
 
 Top
Мелкий Супермодератор
Отправлено: 07 Апреля, 2016 - 15:16:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




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

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 был вызван при завершении скрипта, а не от варнинга.


-----
PostgreSQL DBA
 
 Top
devel0per
Отправлено: 08 Апреля, 2016 - 09:56:39
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Вы правы, я был не внимательным.
Спасибо!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB