Расширяя мой комментарий, вы не прекращаете выполнение скрипта, если сталкиваетесь с ошибкой, такой как максимальный размер файла. Не полагайтесь на html-форму, чтобы фактически остановить загрузку (что, кстати, происходит молча), если изображения больше, чем разрешено. А в вашем php вы просто создаете индекс ошибки, но тем не менее продолжаете манипулировать изображением.
Кроме того, проверка вашего изображения очень плохая по нескольким причинам:
1) соответствие preg, если оно содержит расширение, является ОЧЕНЬ ПЛОХОЙ проверкой , если ее вообще нет.
Попробуйте загрузить shell.php.jpg, и вы поймете, почему;) Один из лучших способов проверить, является ли изображение допустимым, - использовать getimagesize () , который дает вам массив из 7 элементов со множеством полезной информации, а также говорит о том, что изображение является истинным изображением.
Что если я сохраню изображение jpg с расширением png? Я обманываю ваш скрипт, чтобы найти png, а вместо этого он будет jpg. Это легко сломает вашу функцию создания изображения.
2) Ваш способ получить расширение неверен, файл типа my.picture.jpg просто сломает его.
Вы можете использовать pathinfo ($ file, PATHINFO_EXTENSION) , чтобы получить эту информацию; эта функция также получит правильное имя файла, dirpath и т. д., и она более надежна, чем любая домашняя зачистка, чередование и тому подобное
3) PNG и GIF должны требовать дополнительного лечения, например с сохранением альфа-канала ; Вы потеряете прозрачность своих изображений вот так.
Чтобы увеличить предел памяти, используйте ini_set("memory_limit","VALUE HERE")
, как предложено. Но имейте в виду, что обычно это не проблема в случае небольших изображений, поэтому есть что-то еще, что вызывает проблемы. Если вы исправите код там, вам даже не понадобится использовать этот «хак»; кроме того, его расширение означает, что вы выделяете больше ресурсов (чем должно быть выделено), и ваш скрипт может не потерпеть неудачу, но это не означает, что ваш скрипт лучше
О, еще один: случайно ли вы храните изображение в базе данных как поле BLOB-объектов? (неясно, что вы делаете со своим оператором INSERT). Я предлагаю просто сохранить путь к varchar в вашей БД по ряду причин (производительность, целостность данных и т. Д.), Вставка целых двоичных файлов изображения в поле базы данных - не лучшая стратегия.