Leer archivos de un directorio con PHP

En este artículo veremos una forma sencilla de leer archivos de un directorio con PHP, sólo hay una cosa a tener en cuenta: la ruta.

Leer archivos de un directorio con PHP
Leer archivos de un directorio con PHP

Muchas veces se confunde la ubicación de un archivo, como puede ser una imagen, entre su ruta URL de Internet y la ruta física en el disco duro del servidor, su PATH.

La diferencia es muy sencilla, una URL permite acceder a recursos remotos de Internet, como puede ser una imagen con http://midominio.com/mi_imagen.jpg

Esta sencilla URL lo que en realidad está haciendo es establecer un protocolo de comunicación (http://) ubicar la petición en un servidor/ordenador (midominio.com) y dentro de este servidor solicitar el recurso, el archivo (mi_imagen.jpg). Resumiendo, es una ruta o dirección de Internet hasta el archivo.

En cambio cuando queremos leer archivos de un directorio con PHP ya conocemos el servidor (nuestro Hosting), y por este motivo las funciones de PHP utilizan la ruta física del disco duro (PATH) para acceder a los recursos.

Temas de seguridad a parte que no vienen al caso, el servidor sólo nos permite «ver» nuestro «trocito» de Hosting y por eso tenemos que construir la ruta PATH a partir de donde nos permite «ver» el servidor. Esa será la raíz de nuestro Hosting en vez de lo que estamos acostumbrados en nuestro ordenador de casa, como c:\

Dicho esto, la forma de acceder y leer los archivos de un directorio en nuestro servidor es la siguiente:

<!DOCTYPE html>
<head>
  <meta charset="utf-8">
</head>
<body>
  <h2>Listado de archivos</h2> 
<?php
  $directorio = $_SERVER['DOCUMENT_ROOT'].'/images/';
  $scanResult = scandir($directorio);
  $archivos = [];
  foreach($scanResult as $aux) {
    if (is_file($aux)) $archivos[] = $aux;
  }
  natsort($archivos);
  echo '<p>Mostrando archivos encontrados en '.$directorio.'</p>'."\n".'<ul>'."\n";
  for ($i=0; $i<count($archivos); $i++) echo '<li>'.$archivos[$i].'</li>'."\n";
  echo '</ul>'."\n";
?>
</body>
</html>

Como hemos dicho la raíz de nuestra web es $_SERVER[‘DOCUMENT_ROOT’], donde está nuestra página index. A partir de aquí si queremos leer los subdirectorios los añadimos.

La sencilla función scandir() nos devuelve todos los archivos encontrados, sólo debemos iterar entre los resultados para filtrar los datos que nos interesan.

En este caso utilizamos is_file() para seleccionar sólo archivos «normales», desechando archivos ocultos, del sistema, subdirectorios, etc.

Una vez obtenidos los nombres de los archivos encontrados en nuestro Array $archivos podemos ordenarlos y trabajar con ellos. En este caso se muestran en forma de lista <ul>

Y con estas pocas lineas de código ya podemos leer archivos de un directorio con PHP.

¡ Espero que este artículo sea de vuestro interés !

Deja un comentario