PHP ile Uzak ana bilgisayar üzerinde Directory boyutlarını alın

2 Cevap php

Ben ardışık benim ana klasörün içinde bana her klasörün boyutunu gösterecektir şey arıyorum.

Bu bir CGI-Bin yüzden çoğu herhangi bir PHP komut çalışmaz ya da CGI-Bin çalışacak bir şey olmalı bir LAMP sunucusudur.

Bana klasörler alanı en fazla miktarda tüketen hangi görmek için benim hosting şirketi bir arabirim sağlamaz. Ben internette bir şey bilmiyoruz, ve birkaç arama, ancak ben hiçbir sonuç ile geldi etmedi.

Bir şey grafikler uygulanması (GD / ImageMagick) iyi, ancak gerekli değildir olacaktır.

Benim ev sahibi CGI-BIN sadece Perl destekler.

2 Cevap

Garip, many relevant results ve this one muhtemelen en eksiksiz olan Google'da geldi.

The function "getDirectorySize" will ignore link/shorcuts to files/directory. The function "sizeFormat" will suffix the size with bytes,KB,MB or GB accordingly.

Code

function getDirectorySize($path)
{
  $totalsize = 0;
  $totalcount = 0;
  $dircount = 0;
  if ($handle = opendir ($path))
  {
    while (false !== ($file = readdir($handle)))
    {
      $nextpath = $path . '/' . $file;
      if ($file != '.' && $file != '..' && !is_link ($nextpath))
      {
        if (is_dir ($nextpath))
        {
          $dircount++;
          $result = getDirectorySize($nextpath);
          $totalsize += $result['size'];
          $totalcount += $result['count'];
          $dircount += $result['dircount'];
        }
        elseif (is_file ($nextpath))
        {
          $totalsize += filesize ($nextpath);
          $totalcount++;
        }
      }
    }
  }
  closedir ($handle);
  $total['size'] = $totalsize;
  $total['count'] = $totalcount;
  $total['dircount'] = $dircount;
  return $total;
}

function sizeFormat($size)
{
    if($size<1024)
    {
        return $size." bytes";
    }
    else if($size<(1024*1024))
    {
        $size=round($size/1024,1);
        return $size." KB";
    }
    else if($size<(1024*1024*1024))
    {
        $size=round($size/(1024*1024),1);
        return $size." MB";
    }
    else
    {
        $size=round($size/(1024*1024*1024),1);
        return $size." GB";
    }

}

Usage

$path="/httpd/html/pradeep/";
$ar=getDirectorySize($path);

echo "<h4>Details for the path : $path</h4>";
echo "Total size : ".sizeFormat($ar['size'])."<br>";
echo "No. of files : ".$ar['count']."<br>";
echo "No. of directories : ".$ar['dircount']."<br>";

Output

Details for the path : /httpd/html/pradeep/
Total size : 2.9 MB
No. of files : 196
No. of directories : 20

Eğer shell erişiminiz varsa komutunu çalıştırabilirsiniz

$ du -h

ya da belki de PHP yürütülmesine izin verecek şekilde yapılandırılmış ise, bu kullanın:

<?php $d = escapeshellcmd(dirname(__FILE__)); echo nl2br(`du -h $d`) ?>