En este momento estás viendo Leer archivos de un directorio y mostrarlos si coinciden con una variable

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

  • Autor de la entrada:
  • Categoría de la entrada:PHP
  • Comentarios de la entrada:3 comentarios

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.

Esta entrada tiene 3 comentarios

  1. Johel

    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?

    1. Miguel Angel

      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 🙂

Deja una respuesta

Responsable » Miguel Ángel López Torralba
Finalidad » Contactar conmigo y enviarte mi contenido.
Legitimación » Tu consentimiento.
Destinatario » MailChimp, mi proveedor de email marketing, que está acogido al acuerdo de seguridad EU-US Privacy.
Derechos » Acceder, rectificar, limitar o suprimir tus datos cuando quieras.