No has iniciado sesión
Conectar al sistema | Registrar usuario
Categorías Articulo
 
16 votos
Listar archivos 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 
<?php
$directorio
=opendir($dir)
echo 
"<b>Directorio actual:</b><br>$dir<br>"
echo 
"<b>Archivos:</b><br>"
while (
$archivo readdir($directorio))
  echo 
"$archivo<br>"
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 
<?php
$dir 
(isset($_GET['dir']))?$_GET['dir']:"/";
$directorio=opendir($dir)
echo 
"<b>Directorio actual:</b><br>$dir<br>"
echo 
"<b>Archivos:</b><br>"
while (
$archivo readdir($directorio)) { 
  if(
$archivo == '.')
    echo 
"<a href=\"?dir=.\">$archivo</a><br>"
  elseif(
$archivo == '..'){ 
    if(
$dir != '.'){ 
      
$carpetas split("/",$dir)
      
array_pop($carpetas)
      
$dir2 join("/",$carpetas)
      echo 
"<a href=\"?dir=$dir2\">$archivo</a><br>"
    } 
  }
  elseif(
is_dir("$dir/$archivo"))
    echo 
"<a href=\"?dir=$dir/$archivo\">$archivo</a><br>"
  else echo 
"$archivo<br>"
} 
closedir($directorio)
?>
 
Pues de esta manera sencilla tendremos una lista de los archivos de nuestros directórios, y con esto y sabiendo forzar la descarga de un archivo podremos crear un servidor para descargas de forma sencilla.
 

Páginas: 1 2

 
 
¿? Resolver dudas
Si tienes problemas o dudas con el contenido del artículo no dudes a preguntar en los foros de PHP de Programación Web indicando el artículo al que te refieres.
 
Comentarios
06/11/04 Otra forma...
Leyendo el manual de php vi algo...
 
000 
001 
002 
003 
004 
005 
006 
007 
008 
009 
010 
011 
012 
013 
014 
015 
016 
017 
018 
 
<? 
$dir 
'css/'
if(@
$handle opendir($dir)) { 
 echo 
'<form action="" method="" name="">'
 echo 
'<b>Selecciona un estilo:</b><br>'
 echo 
'<select name="">'
 while (
false !== ($file readdir($handle))) { 
 if (
$file != '.' && $file != '..') { 
 echo 
'<option>$file</option>'
 } 
 } 
 echo
'</select> <input type="button" name="boton" value="Enviar"> </form>'
 
closedir($handle)
}else { 
 echo 
'ERROR: No se ha localizado el directorio $dir'
} 
?> 
 

Ese codigo que he sacado del manual oficial de php y que he modificado un poquillo, nos muestras los archivos del directorio (Variable $dir) en un componente de formulario <select> y evita que aparezcan el punto (.) y los dos puntos (..). Yo lo uso para aplicar diferentes estilos en mi web (a modo de themes con css).

Coridales salu2
10/03/06 Listo para bajar...
Aqui hay un codigo que busca en un directorio que esta en mi servidor, imprime un titulo con un estilo en css, evita mostrar el . y .. para que no pueda nadien navegar, y muestra la lista de aplicaciones con sus links correspondientes, con viñetas cuadradas, usenlo esta excelente... lo modifique del que habian dado.. espero que les sirva... por cierto gracias al que puso el original me sirvio de maravilla

 
000 
001 
002 
003 
004 
005 
006 
007 
008 
009 
010 
011 
012 
013 
014 
015 
016 
017 
018 
019 
020 
021 
022 
023 
024 
 
<?php 
 
 
$dir 
"./software/"
$directorio=opendir($dir)
echo 
"<span class='texto_menu_Titulo'>Aplicaciones y Utilerias</span>"
echo 
"<br><br>"
while (
$archivo readdir($directorio)){ 
 if(
$archivo=='.' or $archivo=='..'){ 
 echo 
""
 }else { 
 
$enlace $dir.$archivo
 
 echo 
"<ul type='square'><li>"
 echo 
"<a href=$enlace class='menu'>$archivo<br></a>"
 
 echo 
"</li></ul>"
 
 } 
 } 
closedir($directorio)
?> 
 
 
28/04/08 Listar Archivos Ordenados
Aqui un codigo comentado, es parecido al listador del apache, muestra los archivos listos para descargar asi como la fecha y el tamaño.


function ls(){
$path="./"; //directorio a listar
$directorio=dir($path);

$pn= array();//pila de nombres
$pf= array();//pila de fechas
$pt= array();//pila de tamaNos

//bucle para llenar las pilas :P
while ($archivo = $directorio->read()){
//no mostrar ni "." ni ".." ni el propio "index.php"
if(($archivo!="index.php")&&($archivo!=".")&&($archivo!="..")){
array_push($pn, $archivo);
array_push($pf, date("d F Y H:i", filemtime($archivo)));
array_push($pt, filesize($archivo));
}
}
$directorio->close();

//ordenar las 3 pilas segun la pila de nombres
array_multisort($pn,$pf,$pt);
//mostrar los datos
for($i=0; $i<count($pn); $i++){
echo '<a href="'.$pn[$i].'">'.$pn[$i]."</a><b>fecha:</b>".$pf[$i];
printf(" <b>peso:</b>%1.3fKb<br>\n",$pt[$i]/1000);
}
}

el resultado me va bien en sanchezcom.com en la seccion updown
25/08/09 Funcion Lista
Aqui les dejo mi funcion para listar archivos de un directorio en un combo

function listafiles_directorio_cmb($directorio="",$extension="",$selected=""){

if(tep_not_null($directorio)) {
if(tep_not_null($extension)) {
$str_cmb = "" ;
$size_file = "";
$directory=opendir($directorio);
$nrows = 0 ;
while ($archivo = readdir($directory)) {
if(is_file($directorio.$archivo)){
// Obtengo la extension del archivo
$ext_arr = split("\.",basename($archivo));
$ext = strtolower($ext_arr[count($ext_arr)-1]); // la ultima extension

$all_types = explode(",",strtolower($extension));

if(in_array($ext,$all_types)) {

if(tep_not_null($selected)) {
$selected = ($selected==$archivo)?'selected':'';
}
$size_file = file_size($directorio.$archivo) ;
$str_cmb .= "<option value='$archivo' $selected title=\"Peso del archivo : $size_file\">$archivo</option>";
} ## si esta dentro de los archivos validos => in_array
}# si es un archivo => is_file
$nrows++ ;
} # fin del while
closedir($directory);
}
}
return $str_cmb;
} # fin de la funcion extension
 
Redes Sociales
Programación Webon

Compartir en Google Plus