Задать вопрос
@MRcracker

Как можно узнать размер файлов в папке?

Есть папка, которая содержит файлы. Как узнать их размер? Пробовал через filesize($path) узнать размер, но получилось узнать только размер конкретного файла. Подскажите, как можно решить задачу
  • Вопрос задан
  • 364 просмотра
Подписаться 1 Простой 10 комментариев
Решения вопроса 2
myks92
@myks92 Куратор тега PHP
Нашёл решение — пометь вопрос ответом!
Дубль два. Гугл спешит на помощь! Успокойтесь уже)
//объявляем функцию, которая принимает один параметр - путь к папке
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;
}
Ответ написан
Комментировать
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
function sizeofdir($dir) {
    $dir = realpath($dir);
    $fileSPLObjects =  new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::CHILD_FIRST);
    $dirs = 0;
    $files = 0;
    $dirsize = 0;
    foreach( $fileSPLObjects as $fullFileName => $fileSPLObject ) {
        if ($fileSPLObject->isDir()) {
            $dirs++;
        } elseif ($fileSPLObject->isFile()) {
            $files++;
            $dirsize += $fileSPLObject->getSize();
        }
    }
    return $dirs . ' - Dir(s) , Total: ' . $files . ' file(s) , ' . file_size($dirsize);
}


function file_size($size)
{
    $filesizename = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
    return $size ? round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $filesizename[$i] : '0 Bytes';
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы