fichero disk_free_space php directory

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