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.
Muy bueno! Tengo que leer archivos pdf cargados en un directorio, copiarlos a otra carpeta y almacenarlos en una base de datos dependiendo de algunas variables obtenidas a partir del nombre del archivo. Se podra lograr con un codigo similar?
La verdad es que sí, una vez que leas el nombre del archivo puedes hacer con la cadena lo que quieras, mira esta entrada, con el fin de obtener esas variables del nombre.
Despues lo unico que tienes que hacer es lo que explico en esta entrada para copiar archivos, donde con un poco de imaginación puedes hasta ir eligiendo donde quieres copiar dicho archivo.
Para guardar el nombre en una BBDD yo usaría mysqli que es una forma muy eficiente de trabajar en php nativo, de hecho es como yo lo hago.
Espero haberte ayudado 🙂