Как посчитать размер папки

Статус
В этой теме нельзя размещать новые ответы.

zIP

Новичок
Как посчитать размер папки

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

Фанат

oncle terrible
Команда форума
средствами функций работы с файлами.
прочитать все файлы в каталоге по очереди и посмотреть их размер.
и сложит, разумеется.
 

zIP

Новичок
Подсчитал файлы в папках, а вот как размер посчитать в этом цикле? - застрял.

PHP:
function dirsize( $d ) {
  $count1 = 0;
  $dh = opendir( $d );
  while( ( $files = readdir( $dh ) ) !== false )
   {
    if ( $files != "." && $files != ".." )
     {
      $path = $d . "/" . $files;
      if( is_dir( $path ) )
       {  $count1 += dirsize( $path , $count1 );  }
      elseif( is_file( $path ) )
       {  $count1++;  }
     }
   }
  closedir($dh);
  return $count1;
}
 

Alexos

Новичок
zIP
Там же ж всё на блюдечке с голубой коемочкой [m]filesize[/m]
 

zIP

Новичок
Да в том то и дело, что забуксовал. Простой счетчик я понимаю, а как к нему привинтить filesize() ?
 

God

Новичок
Замени
PHP:
if ( is_dir( $path ) )
    $count1 += dirsize( $path , $count1 );
elseif( is_file( $path ) )
    $count1++;
на
PHP:
if ( is_dir( $path ) )
    $count1 += dirsize($path);
elseif( is_file( $path ) )
    $count1+= filesize($d . '/' . $files);
и будет тебе счастье.
 

for_i_0

Новичок
zIP
а не легче ли было все это glob - ом в цикле foreach провернуть ?
 

BEZZ

Новичок
show_size($f,$format=true) - показывает размер папки или файла $f, если $format=true или не указан, то вместо размера в байтах, возвращается строка, содержащая уже отформатированный размер - например не «10253», а «10.01 Kb». Как показывает практика, это более удобно, так как всё равно обычно приходится приводить всё к такому виду.

PHP:
function show_size($f,$format=true)
{
        if($format)
        {
                $size=show_size($f,false);
                if($size<=1024) return $size.' bytes';
                else if($size<=1024*1024) return round($size/(1024),2).' Kb';
                else if($size<=1024*1024*1024) return round($size/(1024*1024),2).' Mb';
                else if($size<=1024*1024*1024*1024) return round($size/(1024*1024*1024),2).' Gb';
                else if($size<=1024*1024*1024*1024*1024) return round($size/(1024*1024*1024*1024),2).' Tb'; //:)))
                else return round($size/(1024*1024*1024*1024*1024),2).' Pb'; // ;-)
        }else
        {
                if(is_file($f)) return filesize($f);
                $size=0;
                $dh=opendir($f);
                while(($file=readdir($dh))!==false)
                {
                        if($file=='.' || $file=='..') continue;
                        if(is_file($f.'/'.$file)) $size+=filesize($f.'/'.$file);
                        else $size+=show_size($f.'/'.$file,false);
                }
                closedir($dh);
                return $size+filesize($f); // +filesize($f) for *nix directories
        }
}
а вообще смотрим: http://forum.dklab.ru/php/advises/FileFunctions.html
 

zIP

Новичок
А можно ли в эту функцию вставить фильтр. По маске. К примеру считать только файлы html.


Подскажите алгоритм и схему действий.
 

Фанат

oncle terrible
Команда форума
можно.
сделай себе массив из трёх файлов, и потренируйся на нём.
а когнда освоишь фильтрацию - вставляй в скрипт
 

zIP

Новичок
Автор оригинала: BEZZ
http://ru2.php.net/glob - вот тебе маска
Вопрос тупой - я не могу понять почему если я делаю так как показано в примере у меня ничего не выводиться. Точнее в цикле foreach echo не работает вообще?

PHP:
$filename = "test/inde.shtml";
foreach (glob("*.shtml") as $filename) {
   echo "Размер";
   echo "$filename size " . filesize($filename) . "\n";
}
 

zIP

Новичок
Автор оригинала: Фанат
что означает первая строчка этого кода?

а с чего ты взял, что цикл выполняется хоть раз?
1) Там изначально стояло просто "test" как директория.

2) Видимо действительно не выполняеться. Т.е., как я понял, надо смотреть пункт 1?

Значит я не правильно использую foreach.
 

Фанат

oncle terrible
Команда форума
foreach перебирает массивы.
как его можно использовать неправильно - я не представляю.
у тебя glob("*.shtml") что-нибудь находит?
а файлы с таким расширением есть?
 

zIP

Новичок
Файлы есть конечно.
Если я указываю директорию

$filename = "f:/server/info/i/test";

то ничего не находит. А если в текущем каталоге, то работает.
 

Фанат

oncle terrible
Команда форума
НЕ ПОНЯЛ
КОМУ и КАКУЮ директорию указывает эта строчка кода?!
 

for_i_0

Новичок
zIP
давно пора уже различать разницу между обсолютными и относительными путями.
 

zIP

Новичок
А какая в данном случае разница?


Может я просто ничего не понимаю?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху