Рецепт №81. Из книги «128 рецептов php»
Перейти к оглавлению
Еще одним не маловажным рецептом для работы с папками является получение размера папки, со всеми вложенными файлами и подпапками. Для реализации данного примера, хорошо подходит возможность создания рекурсивных функций. При вызове такой функции происходит проверка всех вложенных файлов – определяется их размер. В случае, когда попадается вложенная папка – подпапка, осуществляется рекурсивный вызов функции, которая перебирает файлы уже во вложенной подпапке.
Пример:
// указываем путь до папки или файла
$dirname = '/folder/';
// заносим в переменную размер папки или файла
$size = dir_size($dirname);
echo $formSize;
// функция для просмотра всех подпапок
// и всех вложенных файлов
function dir_size($dirname) {
$totalsize = 0; // общий размер
// открываем папку
if ($dirstream = @opendir($dirname)) {
// перебираем все что находится внутри папки
while(($filename = readdir($dirstream))!==false){
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;
}
В результате выполнения приведенного выше скрипта, мы получим размер папки в байтах. Чтобы сделать красивый, форматированный вывод размера – перевести в Кб, Мб и тд, можно воспользоваться функцией, которая была описана в рецепте «Размер файла. Перевод байт в КБ, Мб и тд».
