|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
|
capitan |
|
|||
Опытный Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 9 Всего: 13 |
Мне просто не понятно, что значит обработать? Записать в лог, прервать выполнение? Перехватить её можно, но вот что дальше делать?
|
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Обработать ошибку - значит перехватить ее, произвести какие-либо действия (не обязательно) и продолжить выполнение программы.
|
|||
|
||||
Simpliest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Вот тут твоя ошибка Выболнение программы в веб это обычно череда запросов (ведь программа это не 1 урл) Т.е. показать на одном из этапов окошко с ошибкой и возможность идти куда-то дальше - будет нормальным |
|||
|
||||
Fubu_By |
|
|||
Опытный Профиль Группа: Участник Сообщений: 290 Регистрация: 14.2.2007 Репутация: нет Всего: 0 |
тут уже лучше сразу посчитать, чтобы память не забивать под ноль
а сначало я и хотел чтото вроде try использовать, но чтобы он заработал надо много возни такак php сам исключения не кидает((( так бы подошёл |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Можно, только это большого смыла в этом не вижу. В случае если над картинкой производятся какие-либо простые манипуляции (надо изменить размер или наложить водный знак), то можно прибегнуть к простому трюку: использовать вместо функций PHP соответствующие консольные утилиты. Добавлено через 5 минут и 5 секунд Нет никакой ошибки. Под программой в данном случае, естественно, имелся ввиду сам скрипт, который при фатальной ошибке завершает свое выполнение. Добавлено через 7 минут и 9 секунд Т.е. несомненно, что можно построить веб приложение так, что бы для пользователя фатальные ошибки остались незамеченными, но это не значит "обработать ошибку". |
|||
|
||||
Simpliest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
sTa1kEr, чтобы не переливать из пустого в порожнее.
Для скрипта, который занимается ресайзом картинки - это фатальная ошибка которую невозможно обработать, ее можно лишь пытаться предотвратить (той же проверкой на размер изображения) Для скрипта, который занимается работой с профайлом пользователя (регистрация, добавление фото и т.д.) данная ошибка фатальной не является (если конечно в сервисе нет обязательного требования на наличие фото ) и посему скрипт может вполне обработать эту ситуацию редиректом, с сообщением о невозможности обработки данного изображения. |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Бррр... опять демагогия пошла
Сухие факты: Фатальная ошибка - это Fatal Error, вне зависимости от назначения скрипта. Точка. Fatal Error - в PHP скрипте перехватить и обработать никак нельзя. Точка. Избежать возникновения Fatal Error при работе с изображениями можно сл. способами: a. Ограничить размер обрабатываемых картинок. б. Использовать консольные утилиты. в. ... Это сообщение отредактировал(а) sTa1kEr - 18.12.2009, 17:33 |
|||
|
||||
Simpliest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Врешь ведь нагло Вот тебе скрипт, который резервирует память и обрабатывает фатальную ошибку котеровским способом http://simpliest.co.cc/consumer.php Исходники http://simpliest.co.cc/provider.phps http://simpliest.co.cc/consumer.phps Это сообщение отредактировал(а) Simpliest - 18.12.2009, 18:21 |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
||||
|
||||
Simpliest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Не-не-не
$_SESSION устанавливает тоже веб-сервер? Ты бы хоть исходники глянул Добавлено через 2 минуты и 11 секунд А то ты так договоришься до того, что exception, кинутый в одном классе (один файл), и, обработанный в другом классе (другой файл), тоже обрабатывает веб-сервер |
|||
|
||||
sTa1kEr |
|
||||
9/10 программиста Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Не притворяйся, ты понял, что я имел ввиду.
Этот код перехватывает и обрабатывает ошибки.
Это ###код по Котерову. Он подменяет текст отправляемый клиенту после завершения работы скрипта. Ни чего общего с обработкой ошибок он не имеет. О чем тут еще можно спорить? Добавлено через 51 секунду По понятным причинам второй пример никогда не используется грамотными программистами на продакшене. |
||||
|
|||||
Simpliest |
|
|||
Опытный Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Ты бы код глянул, а потом бы пузыри пускал про подменяет У меня ничего там не подменяется вовсе Из минусов - вижу проблему с множественными редиректами и усложнение логики программы. Это куда важнее выдуманной тобой подмены чего-то там. Из плюсов - полную изоляцию произвольного скрипта от приложения. Таким способом можно свободно интегрировать произвольные модули сторонних разработчиков не беспокоясь что они обвалят тебе всю страницу. Впрочем, этого же эффекта можно достичь применением аякса, SOAP/RPC. Естественно платить будем производительностью во всех случаях. Вобщем, спасибо, и тебе и Ипатьеву и двум топикстартерам Дали возможность подумать над вопросом |
|||
|
||||
capitan |
|
|||
Опытный Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 9 Всего: 13 |
Все это хорошо, но как я понял вся соль в памяти. Её может и не хватить просто.
|
|||
|
||||
sTa1kEr |
|
||||||||
9/10 программиста Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Ну что-ж. Ты сам попросил Глянул. Беру свои слова назад, у Котерова не ###код Ответь мне, пожалуйста, что произойдет если:
Добавлено через 8 минут и 41 секунду И потом, что-бы и как бы ты не наворотил с буферизацией - это не решит основную проблему: |
||||||||
|
|||||||||
Simpliest |
|
||||
Опытный Профиль Группа: Участник Сообщений: 625 Регистрация: 1.9.2009 Репутация: 1 Всего: 3 |
Я смотрю, ты по прежнему думать не хочешь и продолжаешь упорствовать вместо признания поражения Вот, кстати, эк меня утерли на http://www.php.ru/forum/viewtopic.php?p=192997#192997 http://php.net/manual/en/function.set-erro...ndler.php#88401 http://php.net/register_shutdown_function Вполне можно использовать вместо ob_handler для обработки фатальной ошибки. Теперь, что касается пузырьков... А что изменится? Я в любом случае делаю редирект. Более того, ob_start могут быть вложенными. Очередное буквоедство ай-яй-яй ;) Да, абсолютно, плевать что будет с сессией, я лишь использовал ее в качестве промежуточного звена. Это может быть и временный файл, и GET параметры и БД, и мемкеш. Специально же в один из редиректов засунул GET параметр в качестве примера другого способа. Но пятница... я понимаю Более того... никто ведь не помешает мне сделать session_start(); еще раз непосредственно в обработчике. С этим справится стандартный обработчик. И? Будет лишь другой способ передачи сообщений и управления между компонентами приложения. Суть не измениться. Я смотрю, в хайлоаде работают исключительно с маленькими скриптами и монолитными приложениями состоящими из одного файла? Мысль о том, что приложение может состоять из нескольких частей ты упорно отвергаешь? Изнасилованный твоим буквоедством исходник http://simpliest.co.cc/provider.phps Добавлены вызовы функций из твоего списка. Для проверки разницы работы между ob_handler и register_shutdown_function - нужно закомментировать строку
Фронтэнд http://simpliest.co.cc/consumer.phps остался без изменений Все работает. Даже после падения части приложения в виде provider.php Что-то твои "сухие факты" перешли в разряд фантазий ;) Как итог - Фатальные ошибки несомненно могут быть перехвачены и обработаны при модульной архитектуре приложения и изоляции процесса выполнения отдельных модулей. В качестве метода инстанцирования модуля может использоваться fork, redirect, ajax-request, SOAP/RPC запрос. Способов - миллион. Равно как и методов передачи сообщений между отдельными частями приложения. Это сообщение отредактировал(а) Simpliest - 19.12.2009, 00:53 |
||||
|
|||||
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |