[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нагрузка на сервер
Скрипт по уменьшению тумбов
Всем привет.

Прошу откликнуться знатоков.

Есть большущий объем тумбов (преъевью картинок) на сервере, порядка 500Гб.
Сейчас размер их не устраивает. Написал скрипт который обходит папки и работает с картинками из папок thumbs.

Сам скрипт работает нормально.
Прошу дать советы как не повесить моим скриптом сервер.
Использую в данный момент sleep, но может лучше повесить на крон?
Так же рад любой помощи в оптимизации кода, да бы ускорить процесс обработки тумбов.

Собственно сам код (всего 74 строки)


$start_dir = "F:/www/site.ru/htdocs/upload/photos/posts/"; //полный путь к корневой папке с фоткамми

$w_th = 200; //новая длина тумбы
$h_th = 150; //новая высота тумбы

$cnt_sleep = 10; //после какого числа элементов делать задержку
$time_sleep = 10; //на сколько делать задержку

/*********************************************************/
$ratio = $w_th / $h_th; //определяем коэффициент сжатия изображения
$total = 0; //кол-во обработанных тумбов
$none = 0; //кол-во не обработанных тумбов

class ImageFilter extends FilterIterator {
public function accept () {
return preg_match('@\.(gif|jpe?g|png)$@i', $this->current());
}
}


$dir = (new RecursiveDirectoryIterator($start_dir));

foreach (new ImageFilter(new RecursiveIteratorIterator($dir)) as $file) {
if($total == $cnt_sleep) sleep($time_sleep);

if(preg_match("/thumbs/i", $file->getPath())) {
$result = Resizefile($file->getPathname());

if($result) $total++;
else $none++;
}
}


function Resizefile($file_path) {
global $ratio, $w_th, $h_th;

list($width, $height, $mime) = getimagesize($file_path);

if(($width <= $w_th) && ($height <= $h_th))
return false;

$src_ratio = $width / $height;

if($ratio < $src_ratio) $h_th = $w_th/$src_ratio;
else $w_th = $h_th*$src_ratio;

$clear_img = imagecreatetruecolor($w_th, $h_th);

if($mime == 1)
$src_img = imagecreatefromgif($file_path);
elseif($mime == 2)
$src_img = imagecreatefromjpeg($file_path);
elseif($mime == 3)
$src_img = imagecreatefrompng($file_path);
else
return
false;

imagecopyresampled($clear_img, $src_img, 0, 0, 0, 0, $w_th, $h_th, $width, $height);

unlink($file_path);

if($mime == 1)
imagegif($clear_img, $file_path);
elseif($mime == 2)
imagejpeg($clear_img, $file_path);
elseif($mime == 3)
imagepng($clear_img, $file_path);

imagedestroy($clear_img);
imagedestroy($src_img);

return true;
}

echo "Кол-во обработанных тумбов : {$total}, не обработанных {$none}";




Спустя 1 минута, 49 секунд (10.08.2010 - 17:37) REZzANATOR написал(а):
фак.. забыл войти
Это мой пост)))

Спустя 3 часа, 27 минут, 14 секунд (10.08.2010 - 21:04) linker написал(а):
foreach (new ImageFilter(new RecursiveIteratorIterator($dir)) as $file) {}
Эта жесть... если у меня в папке 10 тысяч файлов, то в цикле получим 10 тысяч объектов создаваемых в цикле, плюс еще, а если есть подпапки - ващее можно афигеть.

Спустя 4 минуты, 4 секунды (10.08.2010 - 21:08) linker написал(а):
P.S. Вот это условие
if($total == $cnt_sleep) sleep($time_sleep);
выполнится только один раз за все время работы скрипта, когда $total примет значение "10".

Спустя 1 минута, 24 секунды (10.08.2010 - 21:09) REZzANATOR написал(а):
а варианты? по другому по моему ни как.

Эээ.. со слипом тупанул) спасибо..подправим

Спустя 3 минуты, 42 секунды (10.08.2010 - 21:13) linker написал(а):
Не знаю, как остальные, но я бы прошелся рекурсивным перебором папок, без всяких классов. Имхо, это было бы гораздо быстрее и менее требовательно к ресурсам сервака.

Спустя 17 часов, 17 минут, 56 секунд (11.08.2010 - 14:31) REZzANATOR написал(а):
хм. ты прав

на рекурсии 10000 файлов - Скрипт отработал за 141.309851 секунд
на итераторе 10000 файлов - Скрипт отработал за 151.990946 секунд


как бы узнать повешу ли я своим скриптом сервак blink.gif
на моем компе =) четырех ядерка - ни капли подвисалок + set_timelimit (0)


Спустя 7 минут, 47 секунд (11.08.2010 - 14:39) linker написал(а):
Я думаю ничего не случится с твоим серваком. А зачем тебе cron?

Спустя 2 часа, 13 минут, 19 секунд (11.08.2010 - 16:52) REZzANATOR написал(а):
объем тумбов не маленький. думал вешать на cron и запускать ночью скрипт с какой нить переодичностью

Спустя 3 часа, 19 минут, 5 секунд (11.08.2010 - 20:11) linker написал(а):
REZzANATOR
А не пробовал, один раз пережать, а потом переделать скрипт, который эти тумбы генерит?

Спустя 2 часа, 59 минут, 9 секунд (11.08.2010 - 23:10) REZzANATOR написал(а):
так и хочу сделать=) только на данный момент оч много их скопилось
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.