Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Listar directorio y Sumar Tamaño de Archivos

Estas en el tema de Listar directorio y Sumar Tamaño de Archivos en el foro de PHP en Foros del Web. Hola a todos, estoy modificando un código para que pueda contabilizar el tamaño de todos los archivos que estan en los directorios y subdirectorios, lo ...
  #1 (permalink)  
Antiguo 02/02/2018, 10:03
 
Fecha de Ingreso: agosto-2006
Mensajes: 25
Antigüedad: 11 años, 8 meses
Puntos: 0
Pregunta Listar directorio y Sumar Tamaño de Archivos

Hola a todos, estoy modificando un código para que pueda contabilizar el tamaño de todos los archivos que estan en los directorios y subdirectorios, lo que vi por internet solo contabilizaba los directorios mas no los subdirectorios dentro de la misma.

El código que hice

Código PHP:
<?
echo $ruta"/home/valuarteandina/public_html/prueba/";
echo 
'<br>';
echo 
$_eltamano=0;
echo 
'<hr>';
function 
listar_directorios_ruta($ruta,$_eltamano){
if (
is_dir($ruta)) {
if (
$dh opendir($ruta)) {
while ((
$file readdir($dh)) !== false) {
echo 
'<h3>Archivo a Analizar '.$file.' - Tamano contado hasta aqui: '.$_eltamano.'</h3>';
if (
is_dir($ruta $file) && $file!="." && $file!=".."){
echo 
"<br>Directorio: $file";
echo 
' <font color="#00CC33">total contado hasta aqui: '$_eltamano.'</font><br>';
$laruta=$ruta.$file;
listar_directorios_ruta($laruta."/"$_eltamano);}
else if(
is_file($ruta $file))
{
echo 
'<br><b>'.$file.' es archivo</b> ';
$tamano=filesize($ruta $file);
$_eltamano+=$tamano;
echo 
'<font color="#3399FF">Tamano del archivo: '.$tamano.'</font> ';
echo 
'<font color="#FF0000">Total contado hasta aqui: '.$_eltamano.'</font>';
}else{ echo 
'<br>'.$file.' no es archivo';
}}
closedir($dh);}}else
{echo 
"<br>No es ruta valida";}
echo 
'<br><b><font color="#055e74">vamos a retonar este tamano total: '.$_eltamano.'</font></b><hr>';
return 
$_eltamano;

echo 
'<h1>Dato Final de espacio en Bytes: '.$_final=listar_directorios_ruta($ruta$_eltamano).'</h1>';
echo 
'<br>';
?>
Tengo la variable $_eltamano que es para sumar el total de todos los tamaños de los archivos, pero hay un punto en que hace return y vuelve y tomar el valor inicial de esta que es 0. para que al final solo me muestre el tamaño del ultimo archivo.

Me explico, corriendo el codigo:


Lo unico que yo deseo es que me sume todos los tamaños, y me muestre el total. Mi situacion es para despues mostrarle al cliente en donde estan los mayores archivos en x directorios.

Un saludo y gracias
  #2 (permalink)  
Antiguo 02/02/2018, 11:31
 
Fecha de Ingreso: agosto-2006
Mensajes: 25
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Listar directorio y Sumar Tamaño de Archivos

Uy, le di solución! despues de estar googleando. Bueno tengo que aprender más PHP porque aun estoy muy novato.

Lo que hice fue no declarar en la función la variable $_eltamano. Le hice otros cambios menores pero solo por estetica. y ponerla global $_eltamano. Que no sabia que se podia hacer.

Adicional agregue de una vez para que me muestre el tamaño en KB o MB, no en GB porque yo necesitaba era mostrarle en MB al cliente.

Código PHP:
<?
echo $ruta$_SERVER['DOCUMENT_ROOT'];
echo 
'<br>';
echo 
$_eltamano=0;
echo 
'<hr>';
function 
listar_directorios_ruta($ruta){ // abre funcion
global $_eltamano;
    if (
$dh opendir($ruta)) { // abre opendir
    
while (($file readdir($dh)) !== false) { // abrewile
    
$laruta=$ruta.'/'.$file;
    echo 
'<h3>Archivo a Analizar  '.$laruta.' - Tamano contado hasta aqui: '.$_eltamano.'</h3>';
    if(
$file != '.' && $file!= '..' && !is_link($laruta)){ // pregunta si es archivo o directorio
        
if (is_dir($laruta)){ // es directorio
        
echo "<br>Directorio: $file";
    echo 
' <font color="#00CC33">total contado hasta aqui: '$_eltamano.'</font><br>';
    
listar_directorios_ruta($laruta."/");} // cierra si es directorio
    
else if(is_file($laruta))
    { 
// pregunta si es archivo
    
echo '<br><b>'.$file.' es archivo</b> ';
    
$tamano=filesize($laruta);
    
$_eltamano+=$tamano;
    echo 
'<font color="#3399FF">Tamano del archivo: '.$tamano.'</font> ';
    echo 
'<font color="#FF0000">Total contado hasta aqui: '.$_eltamano.'</font>';
    } 
// cierra si es archivo
    
else{ echo '<br>'.$file.' no es archivo';} // abre cierra si no es nada
// cierra si es directorio o archivo
// cierra while
    
// cierra opendir
closedir($dh);
echo 
'<br><b><font color="#055e74">vamos a retonar este tamano total: '.$_eltamano.'</font></b><hr>';
return 
$_eltamano;
// cierra funcion
echo '<h1>Dato Final de espacio en Bytes: '.$_final=listar_directorios_ruta($ruta).'</h1>';
echo 
'<br>';
function 
sizeFormat($_dirSize)
    {
        if(
$_dirSize 1024)
        {
            return 
$_dirSize." Bytes.";
        }
        else if(
$_dirSize < (1024*1024))
            {
                
$_dirSize round($_dirSize/1024,1);
                return 
$_dirSize." KB.";
            }
            else
            {
                
$_dirSize round($_dirSize/(1024*1024),1);
                return 
$_dirSize 0.1." MB.";
            }

    }    
echo 
sizeFormat($_final);
?>
Un saludo



La zona horaria es GMT -6. Ahora son las 18:15.