Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

45. Про перехват и обработку фатальных ошибок (Fatal Error) в PHP (Дмитрий Котеров)
Author Message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sun Aug 05, 2007 1:16 pm (написано за 1 секунду)
   Post subject: 45. Про перехват и обработку фатальных ошибок (Fatal Error) в PHP
Reply with quote

dklab.ru/chicken/nablas/45.html
Back to top
View user's profile Send private message Send e-mail
Г.О.
Участник форума



Joined: 22 Feb 2006
Posts: 378
Карма: 13
   поощрить/наказать

Location: Ленинград

PostPosted: Sun Aug 05, 2007 1:39 pm (спустя 23 минуты; написано за 44 секунды)
   Post subject:
Reply with quote

Quote:
Освободив 200К памяти в самом начале обработчика, мы оказываемся практически застрахованными от такой ситуации.
Но зато, зарезервировав их с самого начала повышаем вероятность описанной ошибки :)
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sun Aug 05, 2007 4:42 pm (спустя 3 часа 2 минуты; написано за 1 минуту 4 секунды)
   Post subject:
Reply with quote

Очень и очень незначительно: 200К в наше время - совсем мало. Обычно лимит памяти на хостинге для скриптов составляет 8М и больше, 200K - всего лишь 2.5% от этого объема.
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Wed Aug 08, 2007 11:05 am (спустя 2 дня 18 часов 22 минуты; написано за 3 минуты 48 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров
Опять-таки вероятен горб в php 5.2, где с $GLOBALS в буферах по твоим словам и моим наблюдениям не все так хорошо, как хотелось бы.

[offtop]
...поддержка php 5.2 библиотеками конструктора (что сейчас не наблюдается) с точки зрения маркетинга (читай, удобства использования) крайне желательна...
[/offtop]
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Wed Aug 08, 2007 12:42 pm (спустя 1 час 37 минут; написано за 39 секунд)
   Post subject:
Reply with quote

[offtop]
Константин Жинько [tIT] wrote:
поддержка php 5.2 библиотеками конструктора
Напоминает топик про работу Денвера под Windows Vista...

[/offtop]
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Wed Aug 08, 2007 9:16 pm (спустя 8 часов 34 минуты; написано за 11 секунд)
   Post subject:
Reply with quote

А я вообще не понял, о чем идет речь.
Back to top
View user's profile Send private message Send e-mail
jkeks
Участник форума



Joined: 17 Feb 2004
Posts: 40
Карма: 1
   поощрить/наказать

Location: Россия

PostPosted: Thu Aug 09, 2007 12:52 pm (спустя 15 часов 35 минут; написано за 1 минуту 58 секунд)
   Post subject:
Reply with quote

Я вообще замучался с отладкой AJAX, .. подскажите пожалуйста, а в Apache как можно в логах посмотреть полный ответ сервера клиенту и все заголовки ?
По теме отладки: debugajax.blogspot.com

Last edited by jkeks on Tue Aug 14, 2007 7:49 am; edited 1 time in total
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Aug 09, 2007 2:38 pm (спустя 1 час 46 минут; написано за 20 секунд)
   Post subject:
Reply with quote

В апаче - по-моему, никак.
Сходите, пожалуйста, в Поиск по запросу «LiveHTTPHeaders». Спасибо!
Back to top
View user's profile Send private message Send e-mail
jkeks
Участник форума



Joined: 17 Feb 2004
Posts: 40
Карма: 1
   поощрить/наказать

Location: Россия

PostPosted: Fri Aug 17, 2007 8:38 am (спустя 7 дней 17 часов 59 минут; написано за 29 секунд)
   Post subject:
Reply with quote

Вышла новая версия debug ajax 0.12, тут: debugajax.blogspot.com/ - this russian ajax
Back to top
View user's profile Send private message
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Tue Sep 04, 2007 5:35 pm (спустя 18 дней 8 часов 57 минут; написано за 1 минуту 10 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров
Есть вариант использовать register_tick_function и memory_get_usage для определения утечек/нехватки памяти, ИМХО.
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Tue Sep 04, 2007 8:18 pm (спустя 2 часа 43 минуты; написано за 1 минуту 24 секунды)
   Post subject:
Reply with quote

Константин Жинько [tIT]
Можешь не успеть :). Пример из жизни -- идёт обработка большой фотографии. Открывается фотография с помощью imagecreatefromjpeg() [свободно, скажем, 10 метров], и тутже вылетает Fatal error. Никакими способами ты не сможешь предсказать этот момент.
Back to top
View user's profile Send private message Send e-mail
Константин Жинько [tIT]
Сотрудник «Лаборатории»



Joined: 12 Jun 2004
Posts: 2264
Карма: 106
   поощрить/наказать

Location: Москва

PostPosted: Mon Sep 10, 2007 5:14 pm (спустя 5 дней 20 часов 56 минут; написано за 2 минуты 5 секунд)
   Post subject:
Reply with quote

А почему открывается слишком большая фотография, если стоит лимит на память? Функцию stat() и ей подобные еще никто не отменял.
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Sep 10, 2007 8:11 pm (спустя 2 часа 56 минут; написано за 1 минуту 32 секунды)
   Post subject:
Reply with quote

Константин Жинько [tIT]
Хороший вопрос, почему... Невозможно предусмотреть всего, потому что. А проверять во всех подобных местах, хватит ли памяти, тоже как-то лениво. Поэтому более элегантным способом может быть просто отлов фатальной ошибки, если это нужно :). В любом случае, раз уж в библиотеке заявлена функциональность по перехвату фатальных ошибок, надо её реализовать ;).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Sep 11, 2007 8:07 pm (спустя 23 часа 55 минут; написано за 1 минуту 5 секунд)
   Post subject:
Reply with quote

Кстати говоря, можно и правда getimagesize вызывать перед тем, как отдавать картинку GD. И, если размер больше, к примеру, 3000x3000, выводить ошибку. Такая дополнительная проверка в любом случае не помешает.
Back to top
View user's profile Send private message Send e-mail
dkrnl
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Sep 26, 2007 10:51 am (спустя 14 дней 14 часов 43 минуты; написано за 2 минуты 20 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Кстати говоря, можно и правда getimagesize вызывать перед тем, как отдавать картинку GD. И, если размер больше, к примеру, 3000x3000, выводить ошибку. Такая дополнительная проверка в любом случае не помешает.
getimagesize как раз всю память и скушает, создавая временный битмап в памяти.
Back to top
dkrnl
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Sep 26, 2007 10:57 am (спустя 6 минут; написано за 3 минуты 33 секунды)
   Post subject:
Reply with quote

подход к ловле ошибок интересный очень!
думаю надо "допилить" более гибкую реакцию на всякие ini_get, мало ли что было установлено(display_error, html_errors...) до вызова библиотеки (:
но умеющий допишет все сам, а за идею вам спасибо.
Back to top
Г.О.
Участник форума



Joined: 22 Feb 2006
Posts: 378
Карма: 13
   поощрить/наказать

Location: Ленинград

PostPosted: Wed Sep 26, 2007 11:24 am (спустя 27 минут; написано за 12 секунд)
   Post subject:
Reply with quote

Quote:
getimagesize как раз всю память и скушает, создавая временный битмап в памяти.
Делать ей нечего что ли?
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Sep 27, 2007 6:36 pm (спустя 1 день 7 часов 12 минут; написано за 22 секунды)
   Post subject:
Reply with quote

dkrnl
getimagesize не восстанавливает картинку в памяти. Она по заголовкам размер определяет, это очень быстро и дешево.
Back to top
View user's profile Send private message Send e-mail
Алексей К
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed May 07, 2008 11:56 am (спустя 7 месяцев 9 дней 17 часов 19 минут; написано за 1 минуту 53 секунды)
   Post subject:
Reply with quote

Не получается.
Использую JSHttpRequest. Обработчик вызывается, не спорю, но возвращенный код не выполняется. FireBug все равно пишет ошибку 500 и выделяет запрос красным цветом.
Back to top
Алексей К
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed May 07, 2008 4:17 pm (спустя 4 часа 20 минут; написано за 22 секунды)
   Post subject:
Reply with quote

Заработало! :)
Спасибо автору!
Back to top
BlackByte
Заглянувший



Joined: 19 Aug 2006
Posts: 3
Карма: 0
   поощрить/наказать

Location: Украина

PostPosted: Tue Jun 16, 2009 6:36 pm (спустя 1 год 1 месяц 9 дней 2 часа 19 минут; написано за 1 минуту 45 секунд)
   Post subject:
Reply with quote

Quote:
Кстати, назначенные по register_shutdown_function функции-финализаторы скрипта также не вызываются при наступлении фатальной ошибки.
Понимаю, что статья писалась в 2007 году.
Но сейчас 2009 и данная функция "register_shutdown_function" просто отлично перехватывает фатальные ошибки.

Хотелось бы по слушать комментарии автора.

Вот кстати пример кода: ua.php.net/manual/ru/function.set-error-handler.php#88401

отлично просто отрабатывает
Back to top
View user's profile Send private message
juray
Guest





Карма: 388
   поощрить/наказать


PostPosted: Thu Aug 06, 2009 2:57 pm (спустя 1 месяц 19 дней 20 часов 21 минуту; написано за 2 минуты 44 секунды)
   Post subject: Ну, если уж комментировать старые статьи...
Reply with quote

Попробовал предложенный метод с ob_start.Сходите, пожалуйста, в Поиск по запросу «». Спасибо!
Действительно, "undefined function" ловит на ура.
А вот синтаксические ошибки, unexpected символы - не перехватываются, выводятся по дефолтному.
Back to top
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Thu Aug 06, 2009 3:24 pm (спустя 27 минут; написано за 1 минуту 9 секунд)
   Post subject:
Reply with quote

juray wrote:
А вот синтаксические ошибки, unexpected символы - не перехватываются, выводятся по дефолтному.
Ну, это да, но даже такие ошибки перехватываются, если Вы инклюдите файл из другого файла, в котором прописан ob_start() и в котором, в свою очередь, синтаксических ошибок нет :). Ну и к тому же, чтобы перехватывать синтаксические ошибки достаточно хорошим редактором пользоваться, он Вам сам это подсветит.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

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

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML