Рецепт №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; }
В результате выполнения приведенного выше скрипта, мы получим размер папки в байтах. Чтобы сделать красивый, форматированный вывод размера – перевести в Кб, Мб и тд, можно воспользоваться функцией, которая была описана в рецепте «Размер файла. Перевод байт в КБ, Мб и тд».