Как на PHP подсчитать размер папки с вложениями?

Как узнать размер любой доступной папки на сервере хостинга? - Конечно же использовать PHP! Моя рекурсивная функция для подсчета размера папки с любым количеством вложенных файлов и подкаталогов. Возникнут вопросы по этой статье - оставляйте свои комментарии, или пишите мне со страницы Контакты.

Подсчитать на PHP размер папки

Автор статьи: volego

2018-01-27 19:55:19

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

//объявляем функцию, которая принимает один параметр - путь к папке
function dir_size($dir) {
   //в эту переменную будем накапливать размеры всех найденных файлов
   $totalsize=0;
   //открываем папку
   if ($dirstream = @opendir($dir)) {
      //перебираем все найденные файлы и папки
      while (false !== ($filename = readdir($dirstream))) {
         // если это не сама папка и не её родитель
         if ($filename!="." && $filename!=".."){
            //если это файл - накапливаем его размер
            if (is_file($dir."/".$filename)) $totalsize+=filesize($dir."/".$filename);
            //если это папка - уходим в рекурсию и накапливаем её результат
            if (is_dir($dir."/".$filename)) $totalsize+=dir_size($dir."/".$filename);
         }
      }
   }
   //закрываем папку
   closedir($dirstream);
   //возвращаем накопленное значение размеров
   return $totalsize;
}

Вот и всё! Теперь можно использовать нашу функцию для подсчета размера произвольной папки на хостинге, например:

print "Размер папки images/gallery=".dir_size("images/gallery")." байт";

А ещё можно модифицировать наш код таким образом, что будут считаться только размеры файлов определенного типа. Для этого воспользуемся моей функцией, которая определяет расширение файлов (см. подробную статью об этом).

...
//если это файл и его расширение - png - накапливаем его размер
if (is_file($dir."/".$filename) and getFileExt($dir."/".$filename)=="png") $totalsize+=filesize($dir."/".$filename);
...
//и тогда
print "Размер PNG-файлов в папке images/gallery=".dir_size("images/gallery")." байт";

Таким образом, можно произвольно модифицировать нашу функцию под необходимые нужды.