Intereting Posts
Как ускорить выполнение задач CURL? Разделить строку для формирования многомерных ключей массива? Значения в UTF-8, закодированные как NULL в JSON В PHP после назначения ресурса указателя файла переменной с помощью функции fopen (), как я могу получить имя файла из переменной? Функция php substr () с utf-8 оставляет метки в конце Функция PHP mail (), отправляющая дубликат (пустой) адрес электронной почты Переменная конкатенированная строка запроса mysql отлично работает в phpMyAdmin, но не PHP в скрипте Смешивание результатов различных категорий, упорядоченных по счету в MySQL Функция, чтобы проверить, является ли строка датой Как сделать REMOTE_USER при установке в PHP? Android: загрузка больших файлов с помощью MultipartEntity laravel Hash :: заставить продолжать давать разные результаты MySQL сортируется по определенному списку Создайте SOAP-запрос с атрибутом элемента с помощью Zend_Soap_Client и stdObject (Как) Laravel Развертывание с FTP

Можно ли проверить, приведет ли imagecreatefromjpeg к тому, что память исчерпала фатальную ошибку, прежде чем запускать ее?

Я немного поработал над этим, и я понимаю, что невозможно восстановить из-за фатальной ошибки исчерпанной памяти. У меня есть сценарий, который запускает imagecreatefromjpeg. Я попытался поймать исключение, я попробовал запустить функцию с @, а затем проверил возвращаемое значение для null или false, я попробовал запустить его с помощью функции «die ()». Ничего не работает. Поэтому я не могу «восстановить» его.

Так можно ли предвидеть это, прежде чем я доберусь до него? Можно ли проверить несжатый размер jpeg, а затем умереть грациозно? Я хочу отправить сообщение своим пользователям по строкам «Изображение $ image слишком велико для обработки. Вам нужно будет создать миниатюру вручную».

Мой общий хост не позволит мне увеличить объем памяти до 64 МБ, так что это не вариант. Мой код выглядит следующим образом …

function createthumb($section,$filename,$constrain=100) { $dir = "$section/thumbs_$constrain"; if(file_exists($workingdir."$section/thumbs_$constrain/$filename")) return 1; if(!file_exists($dir)) mkdir($dir); $src = imagecreatefromjpeg($workingdir."$section/$filename"); ... 

Как правило, вы можете использовать размер в пикселях, возвращаемых getimagesize () :

 list ($width, $height) = getimagesize($file); $memory = $width * $height * 4; // 4 bytes per pixel 

Если это число больше, чем предопределенный предел (который будет определен эмпирически, начните с чего-то вроде 32 * 1024 * 1024), то не загружайте его imagecreatefromjpeg() .

Вы думали об использовании ImageMagic вместо GD? ImageMagic может изменять размер jpegs во время загрузки, поэтому он не потребляет много памяти PHP. Подробнее см. В этом ответе StackOverflow .

Я думаю, что только обработчик ошибок может помочь вам, так как обработка исключений может не работать при исчерпании памяти

http://php.net/manual/en/function.set-error-handler.php

Вы можете проверить размер источника строки перед imagegreatefromjpeg.