Go4Expert

Go4Expert (http://www.go4expert.com/)
-   PHP (http://www.go4expert.com/articles/php-tutorials/)
-   -   Calculate directory size using PHP (http://www.go4expert.com/articles/calculate-directory-size-using-php-t290/)

pradeep 5May2005 14:56

Calculate directory size using PHP
 
I was wondering whether i could read the size of a directory using PHP. So i thought of making something which could help me read the size of the directory ,no. of directories and the no. of files in the given diretory.
The function "getDirectorySize" will ignore link/shorcuts to files/directory.
The function "sizeFormat" will suffix the size with bytes,KB,MB or GB accordingly.

Here is the code:


PHP 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";
    }



Example code:

PHP Code:

$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

------------------------------------------------------------
This Article is written by S Pradeep for Programming Forum
------------------------------------------------------------

This article is freely available for reprint provided that the resource box at the end of the article is left intact and the article is published complete and unaltered. If you are using this article on a website or e-book, please make sure that the link in the resource box is live and clickable.

McFarnell 5Oct2007 05:48

Re: Calculate directory size using PHP
 
May I use this code on a web site? Is there some kind of copyright or credit notice I should include? Thanks.

shabbir 5Oct2007 08:58

Re: Calculate directory size using PHP
 
Quote:

Originally Posted by McFarnell
May I use this code on a web site? Is there some kind of copyright or credit notice I should include? Thanks.

Refer to the last line in the article which says what you should be doing. It should link to the forum and the link should be live and click-able.

McFarnell 5Oct2007 09:23

Re: Calculate directory size using PHP
 
Thanks. I wasn't sure because that line is referring to use the article, complete and unaltered. I'm not really using the article, just the code. I wasn't sure what the "resource box" was either. So if I just include a live link back to this thread, would that be acceptable?

shabbir 5Oct2007 11:03

Re: Calculate directory size using PHP
 
Quote:

Originally Posted by McFarnell
Thanks. I wasn't sure because that line is referring to use the article, complete and unaltered. I'm not really using the article, just the code. I wasn't sure what the "resource box" was either. So if I just include a live link back to this thread, would that be acceptable?

Yup.

gkumar 20Jun2009 18:14

Re: Calculate directory size using PHP
 
This Examlpe to calculate directory size using PHP.

PHP Code:

<?PHP
 
// calculate.directory.class.php
// Credits: BitRepository.com
// URL: [url]http://www.bitrepository.com/web-programming/php/[/url]
// calculate-the-size-number-of-files-folders-of-a-directory.html
 
 
CLASS Directory_Calculator {
 
    VAR 
$size_in;
     VAR 
$decimals;
 
    FUNCTION 
calculate_whole_directory($directory)
    {
        IF (
$handle OPENDIR($directory))
        {
        
$size 0;
          
$folders 0;
          
$files 0;
 
        WHILE (
FALSE !== ($file READDIR($handle)))
          {
            IF (
$file != "." && $file != "..")
               {
                   IF(
IS_DIR($directory.$file))
                   {
                
$array $this->calculate_whole_directory($directory.$file.'/');
                
$size += $array['size'];
                    
$files += $array['files'];
                    
$folders += $array['folders'];
                   }
                   ELSE
                   {
                
$size += FILESIZE($directory.$file);
                    
$files++;
                   }
            }
         }
         
CLOSEDIR($handle);
         }
 
           
$folders++;
 
    RETURN ARRAY(
'size' => $size'files' => $files'folders' => $folders);
    }
 
     FUNCTION 
size_calculator($size_in_bytes)
    {
        IF(
$this->size_in == 'B')
        {
        
$size $size_in_bytes;
        }
        ELSEIF(
$this->size_in == 'KB')
        {
        
$size = (($size_in_bytes 1024));
        }
        ELSEIF(
$this->size_in == 'MB')
        {
        
$size = (($size_in_bytes 1024) / 1024);
        }
        ELSEIF(
$this->size_in == 'GB')
        {
        
$size = (($size_in_bytes 1024) / 1024) / 1024;
        }
 
        
$size ROUND($size$this->decimals);
 
          RETURN 
$size;
     }
 
     FUNCTION 
size($directory)
     {
     
$array $this->calculate_whole_directory($directory);
     
$bytes $array['size'];
     
$size $this->size_calculator($bytes);
     
$files $array['files'];
     
$folders $array['folders'] - 1// exclude the main folder
 
     
RETURN ARRAY('size'    => $size,
                   
'files'   => $files,
                   
'folders' => $folders);
     }
}
?>
 
Here�s an usage example of this class:
 
example.php
 
<?PHP
SET_TIME_LIMIT
(10000);
 
INCLUDE 
'calculate.directory.class.php';
 
/* Path to Directory - IMPORTANT: with '/' at the end */
 
$directory '/home/mywebsite.com/public_html/'
 
/* Calculate size in: B (Bytes), KB (Kilobytes), MB (Megabytes), GB (Gigabytes) */
 
$size_in 'MB';
 
/* Number of decimals to show */
 
$decimals 2;
 
$directory_size = NEW Directory_Calculator;
 
/* Initialize Class */
 
$directory_size->size_in $size_in;
$directory_size->decimals $decimals;
 
// return an array with: size, total files & folders
$array $directory_size->size($directory); 
 
ECHO 
"The directory <em>".$directory."</em> has a size of 
     "
.$array['size']." ".$size_in.", ".$array['files']." files & 
     "
.$array['folders']." folders.";
?>


Rosemarieo1 18Jun2010 17:49

Re: Calculate directory size using PHP
 
You actually can. Go search for the codes, you will need that to do have it calculated. The URL is not working. Can you PM another link for this? Thank you!

Rosemarieo1 18Jun2010 17:49

Re: Calculate directory size using PHP
 
Refinance a home mortgage

loyo 22Jun2010 00:43

Re: Calculate directory size using PHP
 
It is good, but I would use the later source code.

PradeepKr 24Aug2010 20:55

Re: Calculate directory size using PHP
 
PHP Code:

   $result=explode("\t",exec("du -hs ".$path),2);
    
$result[1]==$path $result[0] : "error";
    echo 
$result[1]; 



All times are GMT +5.5. The time now is 15:37.