PHP - tamaños de directorios (cuanto ocupa lo que hay de

 
Vista:

tamaños de directorios (cuanto ocupa lo que hay de

Publicado por estibaliz2006 (4 intervenciones) el 13/03/2007 13:29:52
este es el más dificil todavía. a ver. mediante un formulario el usuario que se registra crea un directorio automáticamente con su nombre en el servidor. luego, este usuario puede subir archivos a ese directorio. hasta aquí todo bien.

luego, el usuario tiene un panel al que accede y mediante el cual puede ver los datos que hay en ese directorio. entre otras cosas, puede ver el tamaño de los datos que hay en su directorio, de cada uno de los archivos.

luego, el administrador general de la web, puede acceder a su panel y ahí le saldrán los usuarios registrados. pero lo que yo quiero es que me dé el tamaño de cada directorio de cada uno de esos usuarios registrados. es decir, yo hago una consulta a la base de datos y extraigo los datos de los usuarios registrados (nombre, apellidos, y tal...) pero en otra columna quiero que aparezca el tamaño del directorio que lleva asociado ese usuario (tamaño global, es decir, sumando todos los archivos de ese usuario en ese directorio)

a ver, lo que yo necesito es:

1º) saber que usuarios hay registrados pues esos usuarios son los que dan nombres a los diferentes directorios creados (recordad que cada vez que se registra un usuario, se crea un directorio en el servidor con su nombre). esto más o menos lo tengo, pues hago una consulta a la tabla de la base de datos que recoge los usuarios registrados. esto lo hago con esto:
//////////////////////////////////////////////////////////////////////

include("conexion.php");

$cnx = mysql_query("SELECT nombre, apellidos, email FROM tabla order by apellidos ASC");
$num_reg=mysql_num_rows($cnx);
if($num_reg== 0)
{
print "Actualmente no hay clientes registrados";
}
else
while ($row=mysql_fetch_array($cnx))
{
$nombre = "".$row['nombre']."";
$apellidos = "".$row['apellidos']."";
$email = "".$row['email']."";

echo ("".$apellidos.", ".$nombre." -".$email."-");
}
mysql_free_result($cnx)

////////////////////////////////////////////////////////////////////

esto lo que hace es que me da un listado por filas de los usuarios registrados. ahora, a la derecha de cada una de esas filas yo quiero mostrar una columna con el tamaño que cada uno de los directorios asociados a cada usuario tiene. es decir, supongamos que visualmente es esto:

/////////////////////////////////////////////////
usuario------------------tamaño directorio-----------
juancarlos---------------30 mb
roberto------------------45 mb
/////////////////////////////////////////////////
la primera parte, la del listado de usuarios ya la tengo con el código anterior, pero ¿cómo consigo sacar la otra columna, la del tamaño de cada directorio asociado a cada usuario?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:tamaños de directorios (cuanto ocupa lo que hay

Publicado por falete (1 intervención) el 13/03/2007 16:15:35
Con este par de funcioncillas lo tienes hecho:

function dirsize($dir,$buf=2){
static $buffer;
if(isset($buffer[$dir]))
return $buffer[$dir];
if(is_file($dir))
return filesize($dir);
if($dh=opendir($dir)){
$size=0;
while(($file=readdir($dh))!==false){
if($file=='.' || $file=='..')
continue;
$size+=dirsize($dir.'/'.$file,$buf-1);
}
closedir($dh);
if($buf>0)
$buffer[$dir]=$size;
return $size;
}
return false;
}

function humansize ($bytes){
$position = 0;
$units = array(" bytes", " Kb.", " Mb.", " Gb.", " Tb." );
while( $bytes >= 1024 && ( $bytes / 1024 ) >= 1 ) {
$bytes /= 1024;
$position++;
}

return round ($bytes, 1) . $units[$position];
}

Bueno en realidad con la primera función sólo ya lo tienes, la segunda es para mostrar los datos en Kb., Mb., o lo que sea en lugar de en bytes que es como los devuelve la primera función. Su uso sería:

$tamano = humansize (dirsize ("DIRECTORIO"));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar