Pull to refresh

Нехватка памяти на хостинге для обработки картинок

Reading time1 min
Views4.3K
На моём сайте пользователи загружают картинки, которые уменьшаются до необходимого размера (максимальная сторона — 800 точек). И столкнулся с ограничением памятя для работы PHP скриптов, для обработки фотографий 7 мпикс уже не хватало памяти, а сейчас фотоаппараты и поболее будут, не заставлять же пользователей обрезать фотографии до отправки, многие вообще тогда не будут загружать их.

Ошибка была на строке:
$image = imagecreatefromjpeg($filename);
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 3072 bytes) in…

Чтобы решить проблему, необходимо уменьшить исходную фотографию. ImageMagick на хостинге не оказалось, поэтому не знаю, можно ли было решить проблему через эту библиотеку.
Зато оказалось что можно выполнить внешнюю команду через exec();

Решение проблемы:
$filename = 'image.jpg';
$maxside = 800;
$size = getimagesize($filename);
if (($size[0] > $maxside) or ($size[1] > $maxside)) {
  exec ('mogrify -resize '.$maxside.'x'.$maxside.' '.$filename);
  $size = getimagesize($filename);
}
$image = imagecreatefromjpeg($filename);

P.S.: Поиск в гугле показал несколько форумов, где проблему предлагали решать в лоб — уменьшением лимита памяти, путём договорённости с админами хостинга.
Tags:
Hubs:
Total votes 16: ↑7 and ↓9-2
Comments21

Articles