Foros del Web » Programando para Internet » PHP »

Tamaño completo de una carpeta

Estas en el tema de Tamaño completo de una carpeta en el foro de PHP en Foros del Web. Buenas a todos, Necesito saber el tamaño que ocupa una carpeta completa, es decir, sus archivos y sus subdirectorios con sus correspondientes archivos. Con un ...
  #1 (permalink)  
Antiguo 08/09/2005, 06:28
 
Fecha de Ingreso: septiembre-2005
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
Información Tamaño completo de una carpeta

Buenas a todos,

Necesito saber el tamaño que ocupa una carpeta completa, es decir, sus archivos y sus subdirectorios con sus correspondientes archivos. Con un bucle y readdir consigo saber el tamaño de los archivos que hay dentro de esa carpeta, pero el problema viene cuando hay subdirectorios dentro de ella.

Alguien sabe la mejor manera de solucionar esto?

Gracias de Antemano.
  #2 (permalink)  
Antiguo 08/09/2005, 06:39
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
prueba con la funcion disk-total-space

Un Saludo
  #3 (permalink)  
Antiguo 08/09/2005, 06:45
 
Fecha de Ingreso: septiembre-2005
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
Pero esa función no me mira el tamaño de toda una unidad???

Gracias.

Actualizado: Parece que esaba equibocado, voy a probarlo, muchísimas gracias
  #4 (permalink)  
Antiguo 08/09/2005, 06:53
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
no te dara del directorio que dijas, pero no funciona en remoto

Un Saludo
  #5 (permalink)  
Antiguo 08/09/2005, 07:07
 
Fecha de Ingreso: septiembre-2005
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
Lo siento amigo, gracias pero eso me da como resultado el tamaño de la partición, mira:

Dada una cadena que contiene un directorio, esta función devolverá el número total de bytes en el sistema de archivos o partición de disco correspondiente
  #6 (permalink)  
Antiguo 08/09/2005, 07:17
 
Fecha de Ingreso: agosto-2005
Mensajes: 109
Antigüedad: 12 años, 3 meses
Puntos: 0
Me acabo de dar cuenta de que la carpeta de pruebas me ocupa más de 2 Gb.

Este es el fuente:
Código PHP:
<?

//        http://localhost/Space_Used.php


//-------------------------------------------------------------------------------------------------

    
error_reportingE_ALL );
    @
set_time_limit);

//-------------------------------------------------------------------------------------------------
//  funciones

    
function SpaceUsed($dir) {
        
        global    
$nivel$total;
                
        for( 
$i=0$i<$nivel$i++ )    echo( "    " );
        
$folder substr$dir0strrpos($dir'/') );    
        
$folder substr$folderstrrpos($folder'/' ) + 1);
        echo( 
$folder "<br>" );
        
        
$nivel++;

        if (
is_dir($dir)) {
            if (
$dh opendir($dir)) {
                while ((
$file readdir($dh)) !== false) {
                    if (
is_dir($dir.$file) && $file != '.' && $file != '..') {
                        
spaceUsed$dir.$file.'/' );
                    }
                    else {
                        if( 
$file != '.' && $file != '..' ) {
                            
$total += filesize($dir.$file);
                            for( 
$i=0$i<$nivel$i++ )    echo( "    " );
                            echo( 
$file "<br>" );
                        }
                    }
                }
                
closedir($dh);
                
$nivel--;
            }
        }
    }

//-------------------------------------------------------------------------------------------------
//  main


    
$path "./";

    
$total 0;
    
$nivel 0;
    echo( 
"<br><pre>" );
    
SpaceUsed$path );
    if( 
$total != ) {
        
$total /= 1048576;
        echo( 
"<br><br> total = " round($total1) . " Mb<br>" );
    }
    echo( 
"</pre><br>" );

//-------------------------------------------------------------------------------------------------
//  end
?>
  #7 (permalink)  
Antiguo 08/09/2005, 07:30
 
Fecha de Ingreso: septiembre-2005
Mensajes: 6
Antigüedad: 12 años, 3 meses
Puntos: 0
Muchísimas gracias, esto si es lo que andaba buscando Te kiero tio estoy tras conseguir eso ya mucho tiempo, muchísimas gracias!!


Cualquier cosa que pueda ayudarte aquí tienes mi correo [email protected] (la dirección es de Argentina, pero yo soy Español)

Saludos y gracias a los dos!!!
  #8 (permalink)  
Antiguo 09/09/2005, 03:17
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
le he adaptado un trozo de codigo que vi en php.net asi ahora ademas calcula el tamaño menor del mega y mayor , pone la unidad que le corresponda

Código PHP:
<?

//        http://localhost/Space_Used.php


//-------------------------------------------------------------------------------------------------

    
error_reportingE_ALL );
    @
set_time_limit);

//-------------------------------------------------------------------------------------------------
//  funciones

    
function SpaceUsed($dir) {

        global    
$nivel$total;

        for( 
$i=0$i<$nivel$i++ )    echo( "    " );
        
$folder substr$dir0strrpos($dir'/') );
        
$folder substr$folderstrrpos($folder'/' ) + 1);
        echo( 
$folder "<br>" );

        
$nivel++;

        if (
is_dir($dir)) {
            if (
$dh opendir($dir)) {
                while ((
$file readdir($dh)) !== false) {
                    if (
is_dir($dir.$file) && $file != '.' && $file != '..') {
                        
spaceUsed$dir.$file.'/' );
                    }
                    else {
                        if( 
$file != '.' && $file != '..' ) {
                            
$total += filesize($dir.$file);
                            for( 
$i=0$i<$nivel$i++ )    echo( "    " );
                            echo( 
$file "<br>" );
                        }
                    }
                }
                
closedir($dh);
                
$nivel--;
            }
        }
    }

//-------------------------------------------------------------------------------------------------
//  main


    
$path "./ordena/";

    
$total 0;
    
$nivel 0;
    echo( 
"<br><pre>" );
    
SpaceUsed$path );
    if( 
$total != ) {
         
$unidad "bytes";
         if (
$total 1024) {
             
$total = ($total 1024);
               
$unidad "kB"; }// kilobyte
          
if ($total 1024) {
              
$total = ($total 1024);
              
$unidad "MB"; }// megabyte
           
if ($total 1024) {
               
$total = ($total 1024);
               
$unidad "GB"; }// gigabyte
           
if ($total 1024) {
               
$total = ($total 1024);
            
$unidad "TB"; }// terabyte
        
if ($total 1024) {
               
$total = ($total 1024);
            
$unidad "PB"; }// petabyte
        
if ($total 1024) {
               
$total = ($total 1024);
            
$unidad "EB"; }// exabyte
        
if ($total 1024) {
               
$total = ($total 1024);
            
$unidad "ZB"; }   // zettabyte    
      
if ($total 1024) {
               
$total = ($total 1024);
            
$unidad "YB"; }// yottabyte
   
$total round($total0);
   echo 
"<br><br> Tamaño total : ".$total." ".$unidad."<br>";
    }
    echo( 
"</pre><br>" );



//-------------------------------------------------------------------------------------------------
//  end
?>
Un Saludo

Última edición por DINASEN; 09/09/2005 a las 03:40
  #9 (permalink)  
Antiguo 09/09/2005, 05:10
 
Fecha de Ingreso: agosto-2005
Mensajes: 109
Antigüedad: 12 años, 3 meses
Puntos: 0
Si quieres algo más elegante o al menos universalizable....

Código PHP:
[...]
    echo( 
"<br><pre>" );
    
SpaceUsed$path );
    echo( 
"<br><br> total = " HumanReadableSize($total) . "<br>" );
    echo( 
"</pre><br>" );


siendo

    
function HumanReadableSize($sizeInBytes) {
        
settype($sizeInBytes"double");
        if (
$sizeInBytes 1073741823)
            return 
rtrim(number_format($sizeInBytes/10737418242),"0.")."&nbsp;Gb";
        else if (
$sizeInBytes 1048575)
            return 
rtrim(number_format($sizeInBytes/10485762),"0.")."&nbsp;Mb";
        else if (
$sizeInBytes 1023)
            return 
rtrim(number_format($sizeInBytes/1024,2),"0.")."&nbsp;Kb";
        else
            return 
"$sizeInBytes bytes";
    } 
  #10 (permalink)  
Antiguo 09/09/2005, 05:23
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
muy bueno si señor

Un Saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:09.