Calculate directory size using PHP

pradeep's Avatar author of Calculate directory size using PHP
This is an article on Calculate directory size using PHP in 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.
0
McFarnell's Avatar, Join Date: Oct 2007
Newbie Member
May I use this code on a web site? Is there some kind of copyright or credit notice I should include? Thanks.
0
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
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.
0
McFarnell's Avatar, Join Date: Oct 2007
Newbie Member
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?
0
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
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.
0
gkumar's Avatar
Banned
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.";
?>

Last edited by shabbir; 20Jun2009 at 19:06.. Reason: Code blocks
0
Rosemarieo1's Avatar, Join Date: Jun 2010
Newbie Member
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!
0
Rosemarieo1's Avatar, Join Date: Jun 2010
Newbie Member
Refinance a home mortgage
0
loyo's Avatar, Join Date: Feb 2010
Go4Expert Member
It is good, but I would use the later source code.
0
PradeepKr's Avatar
Go4Expert Member
PHP Code:
   $result=explode("\t",exec("du -hs ".$path),2);
    
$result[1]==$path $result[0] : "error";
    echo 
$result[1];