php disk_total_space

时间:2009-01-21 17:12:12

标签: php directory

我需要有关disk_total_space函数的帮助..

我在我的代码上有这个

<?php
          $sql="select * from users order by id";
          $result=mysql_query($sql);
          while($row=mysql_fetch_array($result)) {
?>
Name : <?php echo $row['name']; ?>
Email : <?php echo $row['email']; ?>
Diskspace Available : <?php 
$dir = "C:/xampp/htdocs/freehosting/".$row['name'];
disk_total_space($dir);
} ?>

然而,这为每个用户返回相同的磁盘空间..

任何人都能给我一些启示?

谢谢:)

5 个答案:

答案 0 :(得分:5)

http://us2.php.net/disk_total_space说,

  

“如果包含目录的字符串,此函数将返回相应文件系统磁盘分区上的总字节数。”

你可能会看到C的总空间:

Alternative solutions do exist for both Windows and Linux

答案 1 :(得分:3)

我认为你想要的是这样的:

function foldersize($path) {
    $total_size = 0;
    $files = scandir($path);

    foreach($files as $t) {
        if (is_dir(rtrim($path, '/') . '/' . $t)) {
            if ($t<>"." && $t<>"..") {
                $size = foldersize(rtrim($path, '/') . '/' . $t);
                $total_size += $size;
            }
        } else {
            $size = filesize(rtrim($path, '/') . '/' . $t);
            $total_size += $size;
        }   
    }
    return $total_size;
}

function format_size($size) {
    $mod = 1024;

    $units = explode(' ','B KB MB GB TB PB');
    for ($i = 0; $size > $mod; $i++) {
        $size /= $mod;
    }

    return round($size, 2) . ' ' . $units[$i];
}

$SIZE_LIMIT = 5368709120; // 5 GB
$sql="select * from users order by id";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)) {
    $disk_used = foldersize("C:/xampp/htdocs/freehosting/".$row['name']);
    $disk_remaining = $SIZE_LIMIT - $disk_used;
    print 'Name: ' . $row['name'] . '<br>';
    print 'diskspace used: ' . format_size($disk_used) . '<br>';
    print 'diskspace left: ' . format_size($disk_remaining) . '<br><hr>';
}

编辑:递归函数最初有一个错误。现在它还应该读取原始文件夹中的文件夹,以及这些文件夹中的文件夹,依此类推。

答案 2 :(得分:1)

我认为该方法只会告诉您有关给定目录所在的文件系统或分区的信息。你可以试着简单地炮轰du但是:

$space_used=`du -sh $dir`;

-s总结整个目录,-h以“人”单位返回结果,如MB和GB。

编辑:道歉,我错过了这是在WIndows上。如果有人帮助搜索类似问题的人,请留下答案。对于Windows,try this suggestion in the PHP manual

答案 3 :(得分:1)

对PHP.net上的函数的评论似乎表明这给出了驱动器/分区$dir的空间,而不是$dir本身的大小。

答案 4 :(得分:0)

根据disk_total_space()的文档,返回的值是针对目录所在的文件系统。它不计算目录及其子目录中使用的空间。

您可以向du或更便携的解决方案进行支持:

$total = 0;

foreach (new RecursiveDirectoryIterator($dir) as $entry)
{
    if ($entry->isFile())
        $total += $entry->getSize();
}