![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Alex13 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 280 Регистрация: 30.12.2005 Где: Новосибирск Репутация: нет Всего: 1 |
Собственно, интересует возможность обработки этой ошибки.
Есть такой код:
При этом ри работе с большими картинками частенько не хватает памяти и выбрасывается исключение типа
Проблема в том, что блок try-catch не срабатывает должным образом. Можно ли как-то по-другому перехватить это исключение или хотябы спрогнозировать его и отказаться от выполнения дальнейшего кода? -------------------- Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий. Антисоциальный блог. |
||||
|
|||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
Alex13, посчитайте, каких максимальных размеров, при выделенном объеме памяти, могут быть обрабатываемые изображения и ограничьте загрузку до этого размера. Или наоборот, увеличьте размер памяти выделяемый для PHP.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 1 Всего: 260 |
относится к исключениям. исключениям, которые должны генерироваться кодом. fatal error генерирует не функция imagecreatetruecolor, а ядром РНР. єто не исключение.
навряд ли. пользовательская обработка ошибок не распространяется на ошибки уровня ядра(всякие там fatal, compile и parse) Добавлено через 2 минуты и 10 секунд IZ@TOP, обрати внимание: он пытается выделить 6400 байт, всего лишь. так что там особо рассчитывать нечего. просто память забита(а лимит - аж 16 Мб). |
|||
|
||||
| d06osipov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 1.11.2006 Репутация: нет Всего: нет |
Измените memory_limit в PHP.ini --- если его сделать достаточно большим ошибки не будет. А ещё вариант --- просто проверяйте размер картинки. Если он больше половины доступной памяти, выдавайте ошибку (если одновременно грузится в память не более одной картинки). Может, есть способ узначть количество задействованной памяти.
|
|||
|
||||
| Sannis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 14.8.2007 Где: Москва Репутация: нет Всего: 13 |
-------------------- |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
skyboy, как знать, куда у него память делась. Я бы порекомендовал ограничить размер изображений, или посоветовал использовать сторонние библиотеки для обработки изображений (к примеру, отличным решением для того же Watermark был бы ImageMagic).
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва Репутация: 4 Всего: 32 |
Спрогнозировать можно по формуле x * y * 4. Полностью оно выглядит как mem_size = x * y * bytes_per_pixel * (1 + c1) + c2, где bytes_per_pixel = 4 для большинства версий GD, c1 и c2 подбираются опытным путем, но в большинстве случаев ничтожно малы.
Насчет перехвата фатальных ошибок был какой-то механизм, основанный на недокументированных фичах буферизации вывода. -------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Да, у Котерова есть статья и библиотечка для этого. Про перехват и обработку фатальных ошибок (Fatal Error) в PHP Вот только это очень не надежный метод, особено при не хватке памяти (для обработчика фатальных ошибок тоже память нужна). Имхо, он больше подходит для отладки, что бы выводить фатальные ошибки с бэктрейсом и дополнительной информацией в удобочитаемом виде. А на продакшене лучше настроить apache с собственным html для 500-ой ошибки. Это сообщение отредактировал(а) sTa1kEr - 12.7.2008, 02:44 |
|||
|
||||
![]()
|
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Для профи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |