note 25922 added to function.disk-total-space
| From: | pdontthink at rack1 dot php dot net | Date: | Fri, 11 Oct 2002 06:01:10 +0000 |
| Subject: | note 25922 added to function.disk-total-space | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-37925@lists.php.net to get a copy of this message | ||
This is similar to the dirsize functions above except it adds:
- Take into account directories that you don't have permission to open (nasty results
otherwise)
- Catch errors and return -1 (remember to check for this!)
- Don't follow symlinks (I'm implementing a quota system, so users shouldn't be
responsible for contents of symlinked directories):
You can call it like this:
$size = dirsize('some/dir/path');
if ($size < 0) echo 'ERROR! Bad path!';
else echo 'Your dirsize is ' . format_size($size);
And the relevant functions are:
// returns the total size, in bytes, of all files
// contained in the directory tree beginning at the
// specified directory
// returns -1 if any problem occured (such as if the
// directory given was nonexistent)
//
function dirsize($directory)
{
if (!is_dir($directory)) return -1;
$size = 0;
if ($DIR = opendir($directory))
{
while (($dirfile = readdir($DIR)) !== false)
{
if (is_link($directory . '/' . $dirfile) || $dirfile == '.' ||
$dirfile == '..')
continue;
if (is_file($directory . '/' . $dirfile))
$size += filesize($directory . '/' . $dirfile);
else if (is_dir($directory . '/' . $dirfile))
{
$dirSize = dirsize($directory . '/' . $dirfile);
if ($dirSize >= 0) $size += $dirSize;
else return -1;
}
}
closedir($DIR);
}
return $size;
}
// stolen from another fine user on php.net
//
function format_size($rawSize)
{
if ($rawSize / 1048576 > 1)
return round($rawSize/1048576, 1) . 'MB';
else if ($rawSize / 1024 > 1)
return round($rawSize/1024, 1) . 'KB';
else
return round($rawSize, 1) . 'bytes';
}
--
http://www.php.net/manual/en/function.disk-total-space.php
http://master.php.net/manage/user-notes.php?action=edit+25922
http://master.php.net/manage/user-notes.php?action=delete+25922
http://master.php.net/manage/user-notes.php?action=reject+25922