|
disk_total_space
Returns the total size of a directory
(PHP 4 >= 4.0.7, PHP 5)
Example 623. disk_total_space() example<?php Related Examples ( Source code ) » disk_total_space Examples ( Source code ) » Disk total space Code Examples / Notes » disk_total_spacenikolayku
Very simple function that convert bytes to kilobytes, megabytes ... function ConvertBytes($number) { $len = strlen($number); if($len < 4) { return sprintf("%d b", $number); } if($len >= 4 && $len <=6) { return sprintf("%0.2f Kb", $number/1024); } if($len >= 7 && $len <=9) { return sprintf("%0.2f Mb", $number/1024/1024); } return sprintf("%0.2f Gb", $number/1024/1024/1024); } andudi
To find the total size of a file/directory you have to differ two situations: (on Linux/Unix based systems only!?) you are interested: 1) in the total size of the files in the dir/subdirs 2) what place on the disk your dir/subdirs/files uses - 1) and 2) normaly differs, depending on the size of the inodes - mostly 2) is greater than 1) (in the order of any kB) - filesize($file) gives 1) - "du -ab $file" gives 2) so you have to choose your situation! on my server I have no rights to use "exec du" in the case of 2), so I use: $s = stat($file); $size = $s[11]*$s[12]/8); whitch is counting the inodes [12] times the size of them in Bits [11] hopes this helps to count the used disk place in a right way... :-) Andreas Dick martijn
This works for me (on a UNIX server): <?php function du( $dir ) { $res = `du -sk $dir`; // Unix command preg_match( '/\d+/', $res, $KB ); // Parse result $MB = round( $KB[0] / 1024, 1 ); // From kilobytes to megabytes return $MB; } $dirSize = du('/path/to/dir/'); ?> shalless
My first contribution. Trouble is the sum of the byte sizes of the files in your directories is not equal to the amount of disk space consumed, as andudi points out. A 1-byte file occupies 4096 bytes of disk space if the block size is 4096. Couldn't understand why andudi did $s["blksize"]*$s["blocks"]/8. Could only be because $s["blocks"] counts the number of 512-byte disk blocks not the number of $s["blksize"] blocks, so it may as well just be $s["blocks"]*512. Furthermore none of the dirspace suggestions allow for the fact that directories are also files and that they also consume disk space. The following code dskspace addresses all these issues and can also be used to return the disk space consumed by a single non-directory file. It will return much larger numbers than you would have been seeing with any of the other suggestions but I think they are much more realistic: <?php function dskspace($dir) { $s = stat($dir); $space = $s["blocks"]*512; if (is_dir($dir)) { $dh = opendir($dir); while (($file = readdir($dh)) !== false) if ($file != "." and $file != "..") $space += dskspace($dir."/".$file); closedir($dh); } return $space; } ?> mat
JulieC: I think you may have misunderstood - given a directory, this function tells you how big the disk paritition is that the directory exists on. So disk_total_space("C:\Windows\") will tell you how big drive C is. It is not suggesting that a directory is a disk partition. kit
I just did the simple thing - <?php function du($dir) { $du = popen("/usr/bin/du -sk $dir", "r"); $res = fgets($du, 256); pclose($du); $res = explode(" ", $res); return $res[0]; } ?> stierguy1
function roundsize($size){ $i=0; $iec = array("B", "Kb", "Mb", "Gb", "Tb"); while (($size/1024)>1) { $size=$size/1024; $i++;} return(round($size,1)." ".$iec[$i]);} tularis
For a non-looping way to add symbols to a number of bytes: <?php function getSymbolByQuantity($bytes) { $symbols = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'); $exp = floor(log($bytes)/log(1024)); return sprintf('%.2f '.$symbol[$exp], ($bytes/pow(1024, floor($exp)))); } juliec
"filesystem or disk partition" does not equal "directory" for Windows. Thanks.
|
Change Languagebasename chgrp chmod chown clearstatcache copy delete dirname disk_free_space disk_total_space diskfreespace fclose feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents file fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype flock fnmatch fopen fpassthru fputcsv fputs fread fscanf fseek fstat ftell ftruncate fwrite glob is_dir is_executable is_file is_link is_readable is_uploaded_file is_writable is_writeable lchgrp lchown link linkinfo lstat mkdir move_uploaded_file parse_ini_file pathinfo pclose popen readfile readlink realpath rename rewind rmdir set_file_buffer stat symlink tempnam tmpfile touch umask unlink |