Dec
6
2011

Calculate the size, count files & folders of a directory with PHP

Here a PHP Class that calculates the size, number of files & folders of a specific directory.


< ?php
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);
	}
}
?>

Save this bit of code in a file called: directory.class.php

How to use


< ?php

include '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;

$array = $directory_size->size($directory); // return an array with: size, total files & folders

echo "The directory <em>".$directory."</em> has a size of ".$array['size']." ".$size_in.", ".$array['files']." files & ".$array['folders']." folders.";
?>
avatar

About the Author: Jecklin Lorinter

I'm the founder of Master Script and a freelance Web Designer/Developer with passion for new technologies.

Leave a comment