php磁盘总空间

php磁盘总空间,php,directory,Php,Directory,我需要有关磁盘总空间功能的帮助 我的密码上有这个 <?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['ema

我需要有关磁盘总空间功能的帮助

我的密码上有这个

<?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);
} ?>

姓名:
电邮:
可用磁盘空间:
但是,这会为每个用户返回相同的磁盘空间

谁能给我点启示

谢谢:)

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

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


.

我认为该方法只会告诉您有关给定目录所在的文件系统或分区的信息。您可以尝试简单地进行以下操作:

-s汇总整个dir,-h以“人类”单位(如MB和GB)返回结果


编辑:抱歉,我错过了这是在WIndows上。将留下答案,以防它帮助搜索类似问题的人。对于windows,

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

根据的文档,返回的值适用于目录所在的文件系统。它不计算目录及其子目录中使用的空间

您可以购买
du
或购买更便携的解决方案:

$total = 0;

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

我想你想要的是这样的:

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>';
}
函数foldersize($path){
$total_size=0;
$files=scandir($path);
foreach($t文件){
if(is_dir(rtrim($path,'/'))./'.$t)){
如果($t“&&$t.”){
$size=foldersize(rtrim($path,“/”).“/”.$t);
$total_size+=$size;
}
}否则{
$size=filesize(rtrim($path,“/”)./”.$t);
$total_size+=$size;
}   
}
返回$total_size;
}
函数格式\u大小($size){
$mod=1024;
$units=explode(“”,'KB-MB-TB-PB');
对于($i=0;$size>$mod;$i++){
$size/=$mod;
}
返回轮($size,2)。“”.$units[$i];
}
$SIZE_LIMIT=5368709120;//5 GB
$sql=“按id从用户订单中选择*”;
$result=mysql\u查询($sql);
while($row=mysql\u fetch\u数组($result)){
$disk_used=foldersize(“C:/xampp/htdocs/freehosting/”$row['name']);
$disk\u remaining=$SIZE\u LIMIT-$disk\u used;
打印“名称:”.$row[“名称”]。
; 打印“使用的磁盘空间:”。格式化大小(使用的磁盘)。
; 打印“剩余磁盘空间:”。格式化大小(剩余磁盘)。

; }

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

du在一个文件路径为C:\-的系统上工作不好-它在Windows中不存在。有趣的是,他在Windows上运行PHP,但如果你在*nix上,大多数PHP都在运行,这会有所帮助。
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>';
}