Funcion para medir directorio completos (Lista para que la usen)

Iniciado por SERBice, 18 Junio 2006, 03:25 AM

0 Miembros y 1 Visitante están viendo este tema.

SERBice

Cuendo yo necesite que me pasaran algo asi nadie supo entender que necesitaba (o no quisieron ayudarme :-()

en fin, aqui les dejo una funcion que hice para medir el tamaño de directorios completos (incluyendo subdirectorio)

<?php 
/*############################################################################ 
#                                                                            # 
#Nombre de la funcion: MeDir                                                 # 
#                                                                            # 
#Autor: SERBice® # 
#                                                                            # 
#Descripcion de la funcion: Recorre un directorio midiendo todos los         # 
#                           archivos que contiene (incluso en sus            # 
#                           subdirectorios, hasta el ultimo).                # 
#                                                                            # 
#Parametros de la funcion: El unico parametro de la funcion MeDir es $dir,   # 
#                          Dicho parametro establece el directorio sobre el  # 
#                          cual actuara la funcion, es decir, que establece  # 
#                          el directorio del cual se obtendra informacion de # 
#                          su tamaño completo, incluyendo subdirectorios.    # 
#                          Si $dir no se establece se utilizara el directorio# 
#                          donde se encuentra el archivo que llamo a la      # 
#                          funcion                                           # 
#                                                                            # 
#Este Software se distribuye bajo Licencia GPL, por lo cual se solicita que  # 
#se utilice con fines no lucrativos, es decir, que sea de uso Personal y No  # 
#Comercial. Que se conserven los derechos de autor y que cualquier           # 
#modificacion le sea notifiacda al autor, para saber y estar al tanto de     # 
#los avances del software en cuestion; y de esta manera enriquezer aun mas   # 
#esta pequeña herramienta                                                    # 
#                                                                            # 
#Atentamente: SERBice®                                                       # 
#                                                                            # 
############################################################################*/ 
function MeDir($dir="."
    { 
        
/* Creamos un array con todos los nombres de directorios y 
        archivos contenidos dentro del directorio inicial */ 
        
$arr scandir($dir); 

        
/* establecemos que la variable $sizedir es igual a cero */ 
        
$sizedir 0

        
/* Recorremos el array saltando los directorios . y .. */ 
        
for ($i=2$i<count($arr); $i++) 
            { 
                
/* Si es un archivo hacer..... */ 
                
if (is_file($dir ."/"$arr[$i])) 
                    { 
                        
/* Establecemos que la variable $sizedir es igual 
                        a ella misma más el tamaño del fichero $dir ."/". $arr[$i] */ 
                        
$sizedir += filesize($dir ."/"$arr[$i]); 
                    } 
                
/* Si es un directorio hacer..... */ 
                
elseif (is_dir($dir ."/"$arr[$i])) 
                    { 
                        
/* Establecemos que la variable $sizedir es igual 
                        a ella misma más el valor devuelto por MeDir */ 
                        
$sizedir += MeDir($dir "/" $arr[$i]); 
                    } 
                
/* Si no sabemos que es reaccionamos como si fuera un archivo y ... */ 
                
else 
                    { 
                        
/* Establecemos que la variable $sizedir es igual 
                        a ella misma más el tamaño del fichero $dir ."/". $arr[$i] */ 
                        
$sizedir += filesize($dir ."/"$arr[$i]); 
                    } 
            } 
        
/* Devolvemos el valor total de $sizedir */ 
        
return $sizedir
    } 
?>


deya

Excelente, muy útil  ::) Buen aporte.  :D

Algo así estaba necesitando en estos días.  :)

Salu2
"No es mas pobre el que tiene poco, sino el que mucho ambiciona" Charles Chaplin.


SERBice

#2
Esta revision achica el codigo y añade la posibilidad de medir en subdirectorios o no segun se necesite

<?php 
/*############################################################################ 
#                                                                            # 
#Nombre de la funcion: MeDir                                                 # 
#Version de la funcion:  1.0.0.4                                             #  
#Fecha de la funcion (Creacion):  01/06/2006                                 #  
#Fecha de la funcion (ultima revision):  19/08/2006                          # 
#                                                                            # 
#Autor: SERBice(r) # 
#                                                                            # 
#Descripcion de la funcion: Recorre un directorio midiendo todos los         # 
#                           archivos que contiene (incluso en sus            # 
#                           subdirectorios, hasta el ultimo).                # 
#                                                                            # 
#Parametros de la funcion: El parametro $dir, establece el directorio sobre el# 
#                          cual actuara la funcion, es decir, que establece  # 
#                          el directorio del cual se obtendra informacion de # 
#                          su tamaño.                                        #
#                          Si $dir no se establece se utilizara el directorio# 
#                          donde se encuentra el archivo que llamo a la      # 
#                          funcion                                              #  
#                          $subdirs es el parametro que establece si vamos   #
#                          o no a medir en subdirectorios o no. Si $subdirs  #
#                           no se establece su valor por defaul sera 1 y     #
#                           medira los subdirectorios                   # 
#                                                                            # 
#Este Software se distribuye bajo Licencia GPL, por lo cual se solicita que  # 
#se utilice con fines no lucrativos, es decir, que sea de uso Personal y No  # 
#Comercial. Que se conserven los derechos de autor y que cualquier           # 
#modificacion le sea notifiacda al autor, para saber y estar al tanto de     # 
#los avances del software en cuestion; y de esta manera enriquezer aun mas   # 
#esta peque?a herramienta                                                    # 
#                                                                            # 
#Atentamente: SERBice(r)                                                     # 
#                                                                            # 
############################################################################*/ 
function MeDir($dir=".",$subdirs=1
    { 
        
/* Creamos un array con todos los nombres de directorios y 
        archivos contenidos dentro del directorio inicial */ 
        
$arr scandir($dir); 

        
/* establecemos que la variable $sizedir es igual a cero */ 
        
$sizedir 0

        
/* Recorremos el array saltando los directorios . y .. */ 
        
for ($i=2$i<count($arr); $i++) 
            { 
                
/* Si es un directorio hacer..... */ 
                
if (is_dir($dir ."/"$arr[$i])) 
                    { 
                        
/* Establecemos que la variable $sizedir es igual 
                        a ella misma m?s el valor devuelto por MeDir */ 
                        
if ($subdirs==1$sizedir += MeDir($dir "/" $arr[$i]); 
                    } 
                
/* Si es un archivo hacer ... */ 
                
else 
                    { 
                        
/* Establecemos que la variable $sizedir es igual 
                        a ella misma m?s el tama?o del fichero $dir ."/". $arr[$i] */ 
                        
$sizedir += filesize($dir ."/"$arr[$i]); 
                    } 
            } 
        
/* Devolvemos el valor total de $sizedir */ 
        
return $sizedir
    } 
?>

Neostream

creo que se refiere a:


que lo copiara y lo pegara :P en pocas palabras que asi mismo lo usara  ;D ey buenisimo gracias por el aporte
solo se q nada se :D

SERBice

#4
el codigo no lo copie de ningun lado, si como explique en el primer post de este tema yo necesitaba esta funcion y nadie supo comprender que necesitaba y decidi hacerlo yo.


todo nacio aca, cuando pedi ayuda y no recibi mucha (solo un pokito, pero que en fin no use mucho).
La URL del post que inicio todo: http://foro.elhacker.net/index.php/topic,114834.0.html

la funcion es de mi autoria y pronto publicare otra nueva que espero que acepten con agrado.


AÑADO: si el codigo lo han visto en otros foros lo he publicado yo (SERBice), y si esta publicado por otra persona en algun otro lado por favor notificarme si no ha respetado los creditos del autor. Gracias

SERBice

#5
Para quienes tengan PHP3/4 y no posean la funcion scandir() la cual es utilizada por MeDir pueden utilizar el siguiente codigo para crear la funcionscandir().

<?php 
Function scandir ($dir)
{
$dir opendir($dir); 
$resultado=Array();
$i=-1;
while (
$file readdir($dir)) { 
    
$i++;
    
$resultado[$i]=$file

closedir($dir); 
return 
$resultado;
}
?>


simplemente agrgando ese codigo antes del de la funcion MeDir todo les funcionara sobre rieles ;)




Revision .11 de la funcion MeDir.
Detalles de la revision:

   Algunas veces en ciertos servidores los directorios no se listan del modo esperado (primero el directorio ".", despues ".." y despues el resto, sino que se listan de forma aleatoria y es por ello que la funcion en algunos servidores daba error porque estaba diseñada para saltar los 2 primeros directorios suponiendo qeu fueran "." y ".." cosa que no es constante en todos los servidores. Actualemnte el bucle de la funcion parte de 0 y no de 2 y con un if se comprueba que el nombre de archivo/directorio actual no sea "." ni "..".


<?php
/* <!--
/*############################################################################ 
#                                                                            # 
#Nombre de la funcion: MeDir                                                 # 
#Version de la funcion:  1.0.0.11                                             #  
#Fecha de la funcion (Creacion):  01/06/2006                                 #  
#Fecha de la funcion (revision 1.0.0.4):  19/08/2006                         # 
#Fecha de la funcion (ultima revision):  16/09/2006                          # 
#                                                                            # 
#Autor: SERBice(r) # 
#                                                                            # 
#Descripcion de la funcion: Recorre un directorio midiendo todos los         #
#                           archivos que contiene (incluso en sus            # 
#                           subdirectorios, hasta el ultimo).                # 
#                                                                            # 
#Parametros de la funcion: El parametro $dir, establece el directorio sobre el# 
#                          cual actuara la funcion, es decir, que establece  # 
#                          el directorio del cual se obtendra informacion de # 
#                          su tamaño.                                        #
#                          Si $dir no se establece se utilizara el directorio# 
#                          donde se encuentra el archivo que llamo a la      # 
#                          funcion                                              #  
#                          $subdirs es el parametro que establece si vamos   #
#                          o no a medir en subdirectorios o no. Si $subdirs  #
#                           no se establece su valor por defaul sera 1 y     #
#                           medira los subdirectorios                   # 
#                                                                            # 
#Este Software se distribuye bajo Licencia GPL, por lo cual se solicita que  # 
#se utilice con fines no lucrativos, es decir, que sea de uso Personal y No  # 
#Comercial. Que se conserven los derechos de autor y que cualquier           # 
#modificacion le sea notifiacda al autor, para saber y estar al tanto de     # 
#los avances del software en cuestion; y de esta manera enriquezer aun mas   # 
#esta peque?a herramienta                                                    # 
#                                                                            # 
#Atentamente: SERBice(r)                                                     # 
#                                                                            # 
############################################################################*/ 
function MeDir($dir=".",$subdirs=1
    { 
        
/* Creamos un array con todos los nombres de directorios y 
        archivos contenidos dentro del directorio inicial */ 
        
$arr scandir($dir); 

        
/* establecemos que la variable $sizedir es igual a cero */ 
        
$sizedir 0

        
/* YA NO Recorremos el array saltando los directorios . y .. */ 
        
for ($i=0$i<count($arr); $i++)
            {
                
/* Comprobamos que el archivo/directorio actual no sea "." ni ".." */
              
if ($arr[$i]!="." && $arr[$i]!="..")
              
{
                /* Si es un directorio hacer..... */ 
                if (is_dir($dir ."/"$arr[$i])) 
                    { 
                        /* Establecemos que la variable $sizedir es igual 
                        a ella misma m?s el valor devuelto por MeDir */ 
                        if ($subdirs==1$sizedir += MeDir($dir "/" $arr[$i]); 
                    } 
                /* Si es un archivo hacer ... */ 
                else 
                    { 
                        /* Establecemos que la variable $sizedir es igual 
                        a ella misma m?s el tama?o del fichero $dir ."/". $arr[$i] */ 
                        $sizedir += filesize($dir ."/"$arr[$i]); 
                    } 
               }
            } 
        
/* Devolvemos el valor total de $sizedir */ 
        
return $sizedir
    } 
?>


Este mismo hilo lo encontras en http://www.zerohack.com.ar/foro/index.php/topic,173.msg254.html#msg254 con todas las revisiones y parches para esta funcion ;)