Размер директории (рекурсивно) и время работы скрипта

Статус
В этой теме нельзя размещать новые ответы.

bugargen

Местный житель
Регистрация
24 Апр 2008
Сообщения
234
Реакции
20
Может есть у кого-нибудь решения сабжа?
Нужно, чтобы:
1. Выводился размер указанной директории (со всеми поддиректориями и файлами, т.е. - рекурсивный подсчёт). Размер должен быть ОБЯЗАТЕЛЬНО в человеческом виде, а именно: XXX МБ XXX КБ XXX Б (как в Винде короче).
2. Выводилось время работы скрипта вида XX дней XX часов XX минут XX секунд.

Спасибо заранее! :)
 
как в Винде короче

Значит вы не под виндой? Может лучше тогда использовать `ls -R -1` и после просуммировать размеры всех файлов? Ну а потом уже целочисленным делением считать мб, кб и байты

Имхо: будет намного быстрее будет, чем скриптом гулять по каталогам.
 
под виндой отпарсить вывоод `dir /S` bg jkyjcnm. согласен - ходить скриптом - гемор. все равно придется обходить стандартные ограничения на работу php скрипта ( по времени ). Так уж лучше системные команды использовать.
 
Может лучше тогда использовать `ls -R -1` и после просуммировать размеры всех файлов?
Вот уж извращение. В никсах есть специальная утилита для определения размера папок - du. В любой вид переведет.
du -s papko
du -h -d papko
И в самом начале скрипта все равно придется прописывать set_time_limit(0);
А по сути это все реализуется обычным рекурсивным обходом каталогов.

Вот примерный код как должно быть. Для времени работы, надо перед началом работы скрипта и его завершением поставить функцию getmicrotime а затем вычислить разницу и заформатить в нужный вид.

PHP:
set_time_limit(0);

$size = dirlen('./joomla/');
$size = view_size($size);

echo($size);
function dirlen($dir) {
	static $length;
	$handle = @opendir($dir);
	while(false !== ($file = readdir($handle))) {
		if (is_file($dir.$file)) {
			$length += filesize($dir.$file);
		} elseif (is_dir($dir.$file) && $file != '.' && $file != '..') {
			dirlen($dir.$file.'/');
		}
	}
	closedir($handle);
	return $length;
}


function view_size($size) {
	if ($size >= 1073741824) {
		$size = round($size/1073741824*100)/100 ." GB";
	} elseif ($size >= 1048576) {
		$size = round($size/1048576*100)/100 ." MB";
	} elseif ($size >= 1024) {
		$size = round($size/1024*100)/100 ." KB";
	} else {
		$size = $size . " B";}
	return $size;
}


Ну как-то так.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху