2009-01-21 6 views
2

i besoin d'aide avec la fonction disk_total_space ..php disk_total_space

j'ai cela sur mon code

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

Cependant cela me revenir même espace disque pour tous les utilisateurs ..

Tout le monde peut me jeter de la lumière?

merci :)

Répondre

3

Je pense que ce que vous voulez est quelque chose comme ceci:

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>'; 
} 

modifier: la fonction récursive avait une bug dedans à l'origine. Maintenant, il devrait également lire les dossiers dans les dossiers d'origine, et les dossiers à l'intérieur de ces dossiers, et ainsi de suite.

1

Je pense que cette méthode ne vous dira que des informations sur le système de fichiers ou la partition sur laquelle se trouve le répertoire. Vous pouvez essayer simplement bombardements à du si:

$space_used=`du -sh $dir`; 

-s résume le répertoire entier, -h renvoie le résultat en unités « humaines » comme MB et GB.

Éditer: excuses, j'ai manqué que c'était sur WIndows. Nous laisserons la réponse au cas où cela aiderait quelqu'un à chercher un problème similaire. Pour les fenêtres, try this suggestion in the PHP manual

+0

du ne fonctionnera pas bien sur un système avec des chemins de fichiers comme C: \ - il n'existe pas sous Windows. – ceejayoz

+0

C'est marrant qu'il exécute PHP sur Windows où cela ne fonctionnera pas - mais si vous êtes sur * nix, où la plupart des PHP s'exécutent, ça va aider. http://linux.die.net/man/1/du –

1

Les commentaires sur la fonction sur PHP.net semblent indiquer que cela donne l'espace du disque/partition $dir est, pas la taille de $dir lui-même.

0

Selon les documents pour disk_total_space(), la valeur renvoyée est pour le système de fichiers le répertoire est situé sur. Il ne compte pas l'espace utilisé dans un répertoire + ses sous-répertoires.

Vous pouvez débourser à du ou pour une solution plus portable:

$total = 0; 

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