How to calculate the size of a directory
Returns the filesize of a whole folder including all sub folders and files.
/** * Calculate the full size of a directory * * @author Jonas John * @version 0.2 * @link https://www.jonasjohn.de/snippets/php/dir-size.htm * @param string $DirectoryPath Directory path */ function CalcDirectorySize($DirectoryPath) { // I reccomend using a normalize_path function here // to make sure $DirectoryPath contains an ending slash // (-> http://www.jonasjohn.de/snippets/php/normalize-path.htm) // To display a good looking size you can use a readable_filesize // function. // (-> http://www.jonasjohn.de/snippets/php/readable-filesize.htm) $Size = 0; $Dir = opendir($DirectoryPath); if (!$Dir) return -1; while (($File = readdir($Dir)) !== false) { // Skip file pointers if ($File[0] == '.') continue; // Go recursive down, or add the file size if (is_dir($DirectoryPath . $File)) $Size += CalcDirectorySize($DirectoryPath . $File . DIRECTORY_SEPARATOR); else $Size += filesize($DirectoryPath . $File); } closedir($Dir); return $Size; }
Snippet Details
-
AuthorJonas John
-
LicensePublic Domain
-
LanguagePHP
-
Created03/29/2006
-
Updated10/01/2007
-
Tagsdirectory functions, files, size
- Related links
$SizeInBytes = CalcDirectorySize('data/');
Sorry folks, comments have been deactivated for now due to the large amount of spam.
Please try to post your questions or problems on a related programming board, a suitable mailing list, a programming chat-room,
or use a QA website like stackoverflow because I'm usually too busy to answer any mails related
to my code snippets. Therefore please just mail me if you found a serious bug... Thank you!
Older comments:
Shagshag February 13, 2011 at 00:38
private function dirsize($dir) {
$size = 0;
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object)
if ($object != "." && $object != ".." && $object != 'index.php')
if (filetype($dir."/".$object) == "dir")
$size += $this->dirsize($dir."/".$object);
else
$size += filesize($dir."/".$object);
reset($objects);
}
return $size;
}
$size = 0;
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object)
if ($object != "." && $object != ".." && $object != 'index.php')
if (filetype($dir."/".$object) == "dir")
$size += $this->dirsize($dir."/".$object);
else
$size += filesize($dir."/".$object);
reset($objects);
}
return $size;
}
theA July 18, 2010 at 07:22
What a Crap! Open and close your IF statements if you post a snippet! Untidy Code!
Took me longer to debug than to write myself, man!
Took me longer to debug than to write myself, man!
Behrooz October 16, 2007 at 19:05
you returned -1 on !$Dir but you didnt handle the -1 result in '$Size += CalcDirectorySize(...'. it would've been better to return 0 and the result wont have those directory sizes included. and I added a $depth to the function witch will cause the program to break on long nested directories. source is available at http://fileserver.void.ir/002/dirsize.tar.gz
Thanks for your great snippets
Thanks for your great snippets
Behrooz October 16, 2007 at 18:37
using "$File[0] == '.'" will skip .htaccess and other files starting with '.'