Как узнать размер папки со всеми подпапками
Как-то я столкнулся с проблемой, нужно было узнать, сколько места на хостинге занимает моя папка с картинками. Проблема была в том, что в папке много подпапок и очень много картинок. Место на хостинге ограниченное и пришлось писать скрипт, который бы запускался раз в сутки и чистил старые файлы, если размер папки с картинками превышал допустимый размер. Как-нибудь я опишу весь этот скрипт, но сейчас, я выложу только ту часть, которая отвечает за получение размера папки.
Исходник:
<?php $dirname = '/folder/' ; // указываем полный путь до папки или файла $size = dir_size( $dirname ); //заносим в переменную размер папки или файла $formSize = format_size( $size ); //форматируем вывод echo $formSize ; // функция для просмотра всех подпапок и всех вложенных файлов function dir_size( $dirname ) { $totalsize =0; if ( $dirstream = @opendir( $dirname )) { while (false !== ( $filename = readdir( $dirstream ))) { if ( $filename != "." && $filename != ".." ) { if ( is_file ( $dirname . "/" . $filename )) $totalsize += filesize ( $dirname . "/" . $filename ); if ( is_dir ( $dirname . "/" . $filename )) $totalsize +=dir_size( $dirname . "/" . $filename ); } } } closedir ( $dirstream ); return $totalsize ; } // функция форматирует вывод размера function format_size( $size ){ $metrics [0] = 'байт' ; $metrics [1] = 'Кбайт' ; $metrics [2] = 'Мбайт' ; $metrics [3] = 'Гбайт' ; $metrics [4] = 'Тбайт' ; $metric = 0; while ( floor ( $size /1024) > 0){ ++ $metric ; $size /= 1024; } $ret = round ( $size ,1). " " .(isset( $metrics [ $metric ])? $metrics [ $metric ]: '??' ); return $ret ; } ?> |
Рассказать друзьям:
Оценить:
Как узнать размер папки со всеми подпапками: 6 комментариев
Спасибо, удобные функции. Только исправь echo $ret, на $size или $formSize
Спасибо, что указали на не точность. Исправил.
Спасибо за хорошую функцию
Спасибо! Пригодилось.
Чтобы посмотреть размеры файлов и папок в корне сайте используя функции автора этой заметки, можно воспользоваться кодом:
$dirnameRoot = $_SERVER['DOCUMENT_ROOT'];
if ($dirstream = @opendir($dirnameRoot)) {
while (false !== ($filename = readdir($dirstream))) {
if ($filename != «.» && $filename != «..») {
if (is_dir($dirnameRoot . «/» . $filename)) {
echo sprintf(‘%s %s’, «/» . $filename, format_size(dir_size($dirnameRoot . «/» . $filename))) . »;
}
if (is_file($dirnameRoot . "/" . $filename))
echo sprintf('%s %s', "/" . $filename, format_size(filesize($dirnameRoot . "/" . $filename))) . '';
}
}
}
closedir($dirstream);
Ну и сколько будет этот скрипт считать 10000 папок и лимон картинок?