vladZzz
Guest
не хватает памяти при resize картинки
Добрый день. Проблема следующая:
На сайте есть галерея, причем галерея вполне нормально работает на win-машине, никаких проблем не наблюдалось.
Но на freebsd хостинге периодически выдают лимит памяти. Я конечно же сразу полез искать в инет - искать ответы по этому вопросы. Нашел пару обсуждений на форумах, выставил Memory Limit = 16M как там рекомендовали - всё равно не помогает.
Что можете посоветовать?
В справочных целях привожу свой php скрипт:
freebsd 4.1
Apache 1.3
CPU - 500mhz и RAM - 64mb (это VDS)
Добрый день. Проблема следующая:
На сайте есть галерея, причем галерея вполне нормально работает на win-машине, никаких проблем не наблюдалось.
Но на freebsd хостинге периодически выдают лимит памяти. Я конечно же сразу полез искать в инет - искать ответы по этому вопросы. Нашел пару обсуждений на форумах, выставил Memory Limit = 16M как там рекомендовали - всё равно не помогает.
Что можете посоветовать?
В справочных целях привожу свой php скрипт:
И сама функция ресайза:// Цикл, т.к. фотографий несколько и они последовательно перебираются. Для тех кто скажет что проблема в цикле говорю заранее что без цикла при загрузке одной фото проблема остаётся.
for($i=1; $i<=3; $i++)
{
$f_title = 'form_title_'.$i;
$f_filename = 'form_filename_'.$i;
if($$f_title & $$f_filename)
{
// Закачиваем фотографию и её превью
// ---------------------------------
$pub_dir = 'pub/gallery/g'.$id;
$pub_preview = $pub_dir.'/preview';
mt_srand();
$random = mt_rand('1000', '10000');
$image = $random.'.jpg';
img_resize($HTTP_POST_FILES['form_filename_'.$i]['tmp_name'], $pub_preview.'/'.$image, 200, 150);
img_resize($HTTP_POST_FILES['form_filename_'.$i]['tmp_name'], $pub_dir.'/'.$image, 640, 480);
$image_preview = addslashes($pub_preview.'/'.$image);
$image = addslashes($pub_dir.'/'.$image);
// Добавляем данные в БД
// ---------------------------------
mysql_query('UPDATE gallery_divs SET pics = pics + 1 WHERE id='.$id) or die(mysql_error());
mysql_query('INSERT INTO gallery_pics (g_id, title, time, image_preview, image, size)
values ("'.$id.'", "'.$title.'", now(), "'.$image_preview.'", "'.$image.'", "'.$size.'")') or die(mysql_error());
}
}
И ещё справочных данных:function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100)
{
if (!file_exists($src)) return false;
$size = getimagesize($src);
if ($size === false) return false;
// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = "imagecreatefrom" . $format;
if (!function_exists($icfunc)) return false;
$x_ratio = $width / $size[0];
$y_ratio = $height / $size[1];
$ratio = min($x_ratio, $y_ratio);
$use_x_ratio = ($x_ratio == $ratio);
$new_width = $use_x_ratio ? $width : floor($size[0] * $ratio);
$new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);
$new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
$new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
$isrc = $icfunc($src);
$idest = imagecreatetruecolor($width, $height);
imagefill($idest, 0, 0, $rgb);
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0,
$new_width, $new_height, $size[0], $size[1]);
imagejpeg($idest, $dest, $quality);
imagedestroy($isrc);
imagedestroy($idest);
return true;
}
freebsd 4.1
Apache 1.3
CPU - 500mhz и RAM - 64mb (это VDS)