• Home »
  • PHP »
  • Leer archivos de un directorio y mostrarlos si coinciden con una variable

Leer archivos de un directorio y mostrarlos si coinciden con una variable

En ocasiones nos vemos obligados a recorrer un directorio y mostrar su contenido como resultado en la web, algo que no es muy difícil de conseguir, pero ¿qué ocurre cuando solo queremos mostrar unos archivos en concreto?

El problema puede ser extrapolable a muchas situaciones, por ejemplo una empresa que guarde las facturas de sus clientes en pdf, nombrando a las facturas por el DNI y una cadena identificable, o para las planillas de trabajo de los empleados de una empresa, las nóminas…

Yo me he encontrado con este problema en concreto  haciendo una web, y decidí buscar una solución fácil y elegante, sin tener que picar mucho código y que fuera efectiva.

En el siguiente plugin vamos a ver como hacerlo en el siguiente código comentado:

<?php
/*
@author Mialto (Miguel Angel López Torralba) @_mialto_
@date 16/2/2015 22:15
*/

/*
La función recibe como parametros la carpeta donde debe de
buscar la información y el usuario (cadena) con el que va 
a comparar los archivos-
*/
function listar_archivos($carpeta, $usuario){
    if(is_dir($carpeta)){//comprueba que $carpeta sea un directorio
        if($dir = opendir($carpeta)){//abre el directrio
            //recorre el directorio mientras haya archivos
            while(($archivo = readdir($dir)) !== false){
                //el if compara que no sea elementos . .. o htaccess
                if($archivo != '.' && $archivo != '..' && $archivo != '.htaccess'){
                    //creamos nuestro elemento comparativo
                    //por medio de una funcion de cadena
                    $comparacion = substr($archivo, 0, 9);
                    //comparamos el elemento con nuestro patron
                    //y si se cumple mostramos el elemento
                    if ($usuario == $comparacion){
                        echo '<a target="_blank" href="'.$carpeta.'/'.$archivo.'">'.$archivo.'</a><br>';
                    }
                }
            }
            closedir($dir);
        }
    }
}
/*este usuario puede venir determinado por una variable, 
una consulta a una base de datos, un formulario...*/
$usuario = "11111111A";
listar_archivos('archivos', $usuario);
?>

De esta forma tan sencilla ya se puede comparar el nombre del archivo con el de una variable que tengamos como patrón y mostrar los archivos que cumplan la condición.

El script, si quitamos los comentarios se queda en unas 20 líneas por lo que es muy sencillo de entender y controlar.