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: 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: $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.
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.
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?
This Examlpe to calculate directory size using PHP. PHP: <?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 <?PHPSET_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.";?>
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!
PHP: $result=explode("\t",exec("du -hs ".$path),2); $result[1]==$path ? $result[0] : "error"; echo $result[1];