Гигантские картинки переполняют память сервера

Закаченные картинки вики обрабатывает и генерит из них битмапы. Так что считайте сколько нужно памяти. Для графика 10000x935 нужно больше 32M и это за пределами того что разрешено одной странице (одному запросу PHP по умолчанию).

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

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

Детали

Расследование привело к переполнению памяти PHP в библиотеке GD при попытке распаковвать PNG в битмап. (Вики хочет генерить thumbnail со всего в т.ч. это уменьшенное превью и "миниатюра" на странице с картинкой)

После того как память съедена оно уже ничего не может сказать кроме пустой страницы. Перехватить catch (Exception) и set_error_handler() в этот момент уже поздно. Нужно заранее ограничивать размеры изображений.

Поставил лимиты на исходный размер:

//VL: 2010-09-06 
        // guard against memory fatal
        // see
        //     $src_image = call_user_func( $loader, $srcPath );
        if ($srcWidth > 2000 || $srcHeight > 2000)
        {
            return;
        }
//VL.
//VL: 2010-09-06 
            // this fatals out for huge bitmaps
 
            // [width] => 10000
            // [height] => 935
            // [media_type] => BITMAP
            // [mime] => image/png
 
            //   $loader == imagecreatefrompng, 
            //   $srcPath == /bhome/part1/03/biosoft/biosoft-m.ru/www/w_upload/f/f7/Сравнение_АЧХ_фильтров_с_Баттервортом_и_без.png 
 
            // see resolution check above
            // there is no better solution:
            // http://stackoverflow.com/questions/1117344/a-fail-safe-way-to-prevent-gd-image-library-from-running-out-of-memory-php
//VL.
            $src_image = call_user_func( $loader, $srcPath );
            $dst_image = imagecreatetruecolor( $physicalWidth, $physicalHeight );