Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Скрипт изменения размеров изображения в папке

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 17088 bytes)
VIpys
Отправлено: 20 Ноября, 2013 - 06:39:54
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




Функция изменения размера изображения в папке, на локальном сервере работает,
на хосте пишет Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 17088 bytes). Как понимаю, нехватает ОП, однако могу расширить её до 64м, ошибка таже, только доступный объем больше... В чем может быть проблема?

CODE (htmlphp):
скопировать код в буфер обмена
  1. #//$path  = 'img/';
  2. #//$width='50';
  3. #//$height='50';
  4. #//$copy='img/thumbs/';
  5.  
  6. function rez($path,$copy,$width,$height)
  7. {
  8.      
  9.  
  10.  
  11.  
  12. $quality = 100;
  13. $color = 0xFFFFFF;
  14.  
  15. $files = glob("$path*.jpg");
  16. //array_push($files,glob("$path*.JPG"));
  17.     for($i = 0, $length = count($files); $i < $length; $i++)
  18.    {
  19.  
  20. //echo "$files[$i] ----- $i <br>";
  21.       // Исключаем из списка директории:
  22.       if( is_dir($path.$files[$i])  )
  23.       {
  24.         unset($files[$i]);
  25.       };
  26. };
  27. //die($files[0]);
  28.  
  29. for($i=0,$L=count($files);$i<$L;$i++)
  30. {
  31. #ini_set("memory_limit", "64M");
  32. $src='./'.$files[$i];
  33. $exp=strripos($files[$i], "/" )+1;
  34. $files[$i] = substr($files[$i],$exp);
  35. $out=$copy.$files[$i];
  36. //die ($out);
  37.  
  38.  
  39.  
  40.  
  41.    // Если файл не существует
  42.    if (!file_exists($src)) {
  43.        return false;  echo "нет такого файла";
  44.    }
  45.  
  46.    // Получаем массив с информацией о размере и формате картинки (mime)
  47.    $size = getimagesize($src);
  48.  
  49.    // Исходя из формата (mime) картинки, узнаем с каким форматом имеем дело
  50.    $format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
  51.    //и какую функцию использовать для ее создания
  52.    $picfunc = 'imagecreatefrom'.$format;
  53.  
  54.    // Вычилсить горизонтальное соотношение
  55.    $gor = $width  / $size[0];
  56.    // Вертикальное соотношение
  57.    $ver = $height / $size[1];  
  58.  
  59.    // Если не задана высота, вычислить изходя из ширины, пропорционально
  60.    if ($height == 0) {
  61.        $ver = $gor;
  62.        $height  = $ver * $size[1];
  63.    }
  64.         // Так же если не задана ширина
  65.         elseif ($width == 0) {
  66.        $gor = $ver;
  67.        $width   = $gor * $size[0];
  68.    }
  69.  
  70.    // Формируем размер изображения
  71.    $ratio   = min($gor, $ver);
  72.    // Нужно ли пропорциональное преобразование
  73.    if ($gor == $ratio)
  74.        $use_gor = true;
  75.    else
  76.        $use_gor = false;
  77.  
  78.    $new_width   = $use_gor  ? $width  : floor($size[0] * $ratio);
  79.    $new_height  = !$use_gor ? $height : floor($size[1] * $ratio);
  80.    $new_left    = $use_gor  ? 0 : floor(($width - $new_width)   / 2);
  81.    $new_top     = !$use_gor ? 0 : floor(($height - $new_height) / 2);
  82.  
  83.    $picsrc  = $picfunc($src);
  84.    // Создание изображения в памяти
  85.    $picout = imagecreatetruecolor($width, $height);
  86.  
  87.    // Заполнение цветом
  88.    imagefill($picout, 0, 0, $color);
  89.    // Нанесение старого на новое
  90.    imagecopyresampled($picout, $picsrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);
  91.  
  92.    // Создание файла изображения
  93.    imagejpeg($picout, $out, $quality);
  94.  
  95.    // Очистка памяти
  96.    imagedestroy($picsrc);
  97.    imagedestroy($picout);
  98.  
  99.    //return true;
  100.  
  101. };
  102. };
  103.  
 
 Top
3d_killer
Отправлено: 20 Ноября, 2013 - 07:05:16
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


Помог: 21 раз(а)




в начале скрипта
PHP:
скопировать код в буфер обмена
  1.  
  2. ini_set("memory_limit", "256M"); //Выставляем ограничение памяти на работу скрипта
  3.  

сталкивался сам
 
My status
 Top
VIpys
Отправлено: 20 Ноября, 2013 - 07:59:37
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




максимально хостинг позволяет

ini_set("memory_limit", "64M");

знаю что нужно менять..хост

а оптимизировать не возможно?

Либо есть скрипт как нить по другому реализующий данную операцию?
 
 Top
Мелкий Супермодератор
Отправлено: 20 Ноября, 2013 - 08:49:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




GD любит память. И чем больше изображение - тем больше ему надо памяти.
Попробуйте http://php.net/manual/en/book.imagick.php Он мощнее и демократичнее к ресурсам.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Графика в PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB