Calculate dir size recursively with PHP (and count files)

This small PHP function lets you calculate the dir size entering each sub dir and making the sum of the…

Febbraio 1, 2010

This small PHP function lets you calculate the dir size entering each sub dir and making the sum of the filesize of every file contained. Returns an array of two values: size and numbers of file. The second function shows how format the size in a more readable way (with abbreviation MB, KB, GB).

function dirsize($dir) {
	if(is_file($dir)) return array('size'=>filesize($dir),'howmany'=>0);
	if($dh=opendir($dir)) {
		$size=0;
		$n = 0;
		while(($file=readdir($dh))!==false) {
			if($file=='.' || $file=='..') continue;
			$n++;
			$data = $this->dirsize($dir.'/'.$file);
			$size += $data['size'];
			$n += $data['howmany'];
		}
		closedir($dh);
		return array('size'=>$size,'howmany'=>$n);
	} 
	return array('size'=>0,'howmany'=>0);
}

If you want to show the file size in a more readable way you can use this second function to format the value:

function file_size($fsizebyte) {
	if ($fsizebyte < 1024) {
		$fsize = $fsizebyte." bytes";
	}elseif (($fsizebyte >= 1024) && ($fsizebyte < 1048576)) {
		$fsize = round(($fsizebyte/1024), 2);
		$fsize = $fsize." KB";
	}elseif (($fsizebyte >= 1048576) && ($fsizebyte < 1073741824)) {
		$fsize = round(($fsizebyte/1048576), 2);
		$fsize = $fsize." MB";
	}elseif ($fsizebyte >= 1073741824) {
		$fsize = round(($fsizebyte/1073741824), 2);
		$fsize = $fsize." GB";
	};
	return $fsize;
}

Author

PHP expert. Wordpress plugin and theme developer. Father, Maker, Arduino and ESP8266 enthusiast.

Comments on “Calculate dir size recursively with PHP (and count files)”

There are 3 thoughts

  1. Jos ha detto:

    Grazie per lo script, il risultato del calcolo è veloce e comprensibile grazie alla funzione file_size

  2. wtf ha detto:

    Do you even check your own code, or its even yours ?
    Fatal error: Using $this when not in object context on line 9

  3. Giulio Pons ha detto:

    Sometimes I take pieces of code from my works and put them into posts, when I do this action late at night this brings some errors. Sorry. :) Can you fix the error on your own?

Comments are closed