Comunidad de diseño web y desarrollo en internet online

Generar una lista de archivos de un directorio web con PHP

Este tip está basado en uno anterior creado por el maestro Zguillez. Tomando como base su código, siguiendo unos consejos de unos, las peticiones de otros y algunas mejoras añadidas he creado este nuevo script capaz de listar los archivos contenidos en un directorio con php y mostrar el listado en un xml.

El fichero php lo sitúo a continuación:

Código :

<?php

   header ("content-type: text/xml");
   
   //---Obtener variables pasadas por GET
   $path = !isset($_GET['path']) ? './' : $_GET['path'];
   $files = !isset($_GET['files']) ? '\w{3,4}' : '(' . implode(')|(', explode('@', $_GET['files'])) . ')';
   $order = !isset($_GET['order']) ? 'name' : $_GET['order'];
   
   //---Arreglo donde se guardarán todos los archivos
   $store = array();
   
   //---Regular Expression
   $reg = '/\w*+.+'. $files .'$/';
   
   $sum = 0;
   
   //---Si es un directorio
   if(is_dir($path)){
      
      //---Abrir el directorio
      if($gd = opendir($path)){
         
         //---Recorrer todos los archivos del directorio
         while(($archivo = readdir($gd)) !== false){
            
            //---Si se cumple la expresión regular
            if(preg_match($reg, $archivo) && !is_dir($archivo)){
               
               //---Guardar todos los datos en el arreglo tomando como index la fecha
               $date = filemtime((strpos($path, '/')) ? $path . $archivo : $path . '/' . $archivo);
               
               $store[$date . '_' . $sum] = $archivo;
               
               $sum++;
               
            }
            
         }
         
      }
      
   }
   
   //---Organizar el arreglo
   if($order == 'name'){
      
      natcasesort($store);
      
   }else{
   
      ksort($store);
      
   }
   
   //---Crear el XML
   $xml = new DomDocument('1.0', 'UTF-8');
   
   //---Crear el nodo raiz
   $root = $xml->createElement('folder');
   $root = $xml->appendChild($root);
   
   //---Ir creando los nodos
   foreach($store as $item => $value){
      
      //---Crear los subnodos
      $subnode = $xml->createElement('file');
      $subnode = $root->appendChild($subnode);
      
      //---Insertar el texto del nombre en el nodo
      $text = $xml->createTextNode($value);
      $subnode->appendChild($text);
      
   }
   
   //---Output
   echo $xml->saveXML();
   
?>


Como novedad en el script tenemos la opción de pasarle los siguientes parámetros:

path: ruta de la carpeta que contiene las imágenes. (valor por defecto: la carpeta donde se encuentra el script)
files: Extensión o extensiones de los ficheros a mostrar de la carpeta. (valor por defecto: mostrar todos)
order: Posibilidad de ordenar la lista de archivos por el nombre o por la fecha de creación. (valor por defecto: por nombre)

Los parámetros se pasarán directamente en la url y el fichero php los capturará por GET.

Los siguientes links son reales y podemos observar como se comporta el XML generado dependiendo de los parámetros que pasemos en la url:

Si no le pasamos el parámetro path el script generará una lista con los archivos que se encuentren en su misma carpeta

http://elkikinet.110mb.com/list.php

Si le pasamos el parámetro path el script generará una lista con los archivos contenidos en dicha ruta

http://elkikinet.110mb.com/list.php?path=images_list

Si le pasamos una extensión en el parámetro files el script generará una lista sólo con ese tipo de archivo

http://elkikinet.110mb.com/list.php?path=images_list&files=jpg

Podemos pasar más de una extensión si las separamos con @

http://elkikinet.110mb.com/list.php?path=images_list&files=jpg@gif

Y por último podemos ordenar los ficheros por nombre
http://elkikinet.110mb.com/list.php?path=images_list&files=jpg@gif@png&order=name

O podemos ordenarlos por fecha de modificación

http://elkikinet.110mb.com/list.php?path=images_list&files=jpg@gif@png&order=date

Espero que les sea útil y el crédito es para Zguillez que fue quien creó el script, yo sólo he añadido otras funciones.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate