disk_free_space - flush file php
php disk_total_space (5)
Necesito ayuda con la función disk_total_space.
tengo esto en mi código
<?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);
} ?>
Sin embargo, esto me devuelve el mismo espacio de disco para todos los usuarios.
¿Alguien puede arrojarme algo de luz?
Gracias :)
Creo que ese método solo le dirá información sobre el sistema de archivos o la partición en la que se encuentra el directorio. Podrías probar simplemente bombardeando a Du aunque:
$space_used=`du -sh $dir`;
-s resume todo el directorio, -h devuelve el resultado en unidades "humanas" como MB y GB.
Edición: disculpas, me perdí que esto estaba en WIndows. Dejaré la respuesta en caso de que ayude a alguien a buscar un problema similar. Para Windows, pruebe esta sugerencia en el manual de PHP
Creo que lo que quieres es algo como esto:
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>'';
}
editar : la función recursiva tenía un error originalmente. Ahora también debería leer las carpetas dentro de las carpetas originales y las carpetas dentro de esas carpetas, y así sucesivamente.
Los comentarios sobre la función en PHP.net parecen indicar que esto da el espacio de la unidad / partición en la que está $dir
, no el tamaño de $dir
sí.
Según los documentos para disk_total_space()
, el valor devuelto es para el sistema de archivos en el que se encuentra el directorio . No cuenta el espacio utilizado en un directorio + sus subdirectorios.
Puede pagar a du
o para una solución más portátil:
$total = 0;
foreach (new RecursiveDirectoryIterator($dir) as $entry)
{
if ($entry->isFile())
$total += $entry->getSize();
}
http://us2.php.net/disk_total_space dice,
"Dado una cadena que contiene un directorio, esta función devolverá el número total de bytes en el sistema de archivos correspondiente o la partición del disco ".
Probablemente estés viendo el total_space de C: