martes, 22 de mayo de 2007

Listar contenido de un directorio

Vamos a ver cómo podemos conseguir una lista de los archivos y directórios contenidos en un directório de nuestro servidor.

Para esto, abriremos un descriptor de fichero para el directório usando la función opendir, luego leeremos los nombres de los archivos con la función readdir y finalmente eliminaremos el descriptor con closedir.

Veamos cómo sería:
000
001
002
003
004
005
006
007
=opendir($dir);
echo
"Directorio actual:
$dir
"
;
echo
"Archivos:
"
;
while (
$archivo = readdir($directorio))
echo
"$archivo
"
;
closedir($directorio);
?>


Pero vamos a mejorarlo un poco, gracias a la funcion is_dir podremos saber si tratamos con un archivo, y con esto y un poco de cuidado con los casos de directorios especiales ( . y .. ), podremos navegar por los directórios con un código cómo el siguiente:
000
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
= (isset($_GET['dir']))?$_GET['dir']:"/";
$directorio=opendir($dir);
echo
"Directorio actual:
$dir
"
;
echo
"Archivos:
"
;
while (
$archivo = readdir($directorio)) {
if(
$archivo == '.')
echo
"$archivo
"
;
elseif(
$archivo == '..'){
if(
$dir != '.'){
$carpetas = split("/",$dir);
array_pop($carpetas);
$dir2 = join("/",$carpetas);
echo
"$archivo
"
;
}
}
elseif(
is_dir("$dir/$archivo"))
echo
"$archivo
"
;
else echo
"$archivo
"
;
}
closedir($directorio);
?>


Listar archivos ordenados por fecha
En la página anterior os explicaba cómo podíamos listar los archivos de un directorio de nuestro servidor usando PHP, pues ahora vamos a ver cómo podemos ordenar estos archivos por su fecha de creación.

Para hacer esto, almacenaremos los nombres de los archivos en un vector, que luego ordenaremos usando usort y una función que llamaremos ordenar y que usa filemtime:
000
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
$directorio = '/';
function
ordenar($a,$b){
global
$directorio;
$a = filemtime($directorio.$a);
$b = filemtime($directorio.$b);
if (
$a == $b) {
return
0;
}
return (
$a < $b) ? -1 : 1;
}
$dir=opendir($directorio);
echo
"Directorio actual:
$directorio
"
;
echo
"Archivos:
"
;
while(
$arch=readdir($dir))$ars[]=$arch;
closedir($dir);
usort($ars, "ordenar");
foreach(
$ars as $ar)echo "$ar
"
;
?>


Una vez hemos leido los archivos como se explicaba en la página anterior, los ordenamos con usort y la función ordenar.

Esta función binaria, compara los dos archivos y devuelve 1, -1 según que archivo es mas nuevo o 0 si tienen la misma fecha.

fuente: http://www.programacionweb.net

No hay comentarios.: