Recorrer directorio de archivos con PHP

Todo programador experimentado en alguna ocasión se tiene que enfrentar a tener que realizar un script que recorra todo un servidor o parte de él para realizar una función específica, como por ejemplo eliminar algún código malintencionado que pudiera estar en todos tus archivos o añadir un código necesario en todos los archivos.

En este artículo vamos a ver una función recursiva muy interesante para recorrer todos los directorios y archivos de una ruta base.

La función es la siguiente:

function showFiles($path){
    $dir = opendir($path);
    $files = array();
    while ($current = readdir($dir)){
        if( $current != "." && $current != "..") {
            if(is_dir($path.$current)) {
                showFiles($path.$current.'/');
            }
            else {
                $files[] = $current;
            }
        }
    }
    echo '<h2>'.$path.'</h2>';
    echo '<ul>';
    for($i=0; $i<count( $files ); $i++){
        echo '<li>'.$files[$i]."</li>";
    }
    echo '</ul>';
}

Esta función recibe como único parámetro la ruta o el directorio base a analizar o recorrer.

Lo primero que hacemos es abrir el directorio facilitado por parámetro y recorrer sus archivos y demás directorios dentro de él.

La recursividad se ejecutará cuando el elemento que se está analizando se trata de otro directorio, entonces, volveríamos a llamar a la función para recorrer lo que haya dentro de este último directorio.

En el caso de que estemos analizando un archivo lo que hacemos es guardarlo en un array.

Si quisieramos simplemente analizar solo un tipo de archivos, como por ejemplo todos aquellos con extensión .php deberemos añadir una condición antes de guardar en el array los archivos:

if(eregi(".*\.php", $path.$current))

En este caso solo procesaremos o mostraremos los archivos .php.

En el ejemplo que se ilustra a continuación vamos a analizar el directorio raiz llamando a esta función de la siguiente forma:

showFiles('./');

Ver ejemplo en funcionamiento

Autor
Escrito por Jose Aguilar - Experto programador Prestashop y Wordpress.
Te ha servido? Valora esta entrada!
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (11 votos, promedio: 5,00 de 5)
Cargando…
Comparte en las redes sociales

16 respuestas a “Recorrer directorio de archivos con PHP”

  1. gustavo dice:

    hola, nose si me podrias explicar como hacerle para que cuando un usuario se registre se genere una carpeta con su nombre de usuario y despues vaya al sistema upload suba su archivo y el archivo se guarde en su carpeta y despues aparezca ese archivo en su perfil.
    Saludos!

  2. Andres dice:

    Jose.
    tengo una duda.
    ¿donde pongo la dirección de la carpeta que quiero consultar?

  3. Ana Taboada dice:

    excelente blog, me gusto tu idea de i documentando y compartiendo todo lo que vas aprendiendo, felicidades !

  4. Miguel Ruiz dice:

    Que tal josé estoy realizando una galería de fotos php utlizando lightbox con imágenes estáticas me despliega y agrande las fotos sin ningún problema en la página principal pero al utilizar bd o que se manden llamar de una carpeta no me hace el efecto de agrandar las fotos que estaré haciendo mal, que me falta o sobra cualquier orientación que me puedas dar te lo agradeceré saludos !!!!!

  5. serlupo dice:

    Buenas, lo primero gracias por la función.

    Tengo un problema y es que sólo me imprime los nombres de las carpetas pero nada de su contenido. He cogido tu ejemplo tal cuál, sólo le he pasado por parámetro el path.

    Qué es lo que puedo estar haciendo mal.

    Muchas gracias por todo

    • Jose Aguilar dice:

      Hola buenas tardes,

      Pues nos interesaría mucho ver el código que estás poniendo. Así sin ver nada poco te podemos decir.

      Si has puesto lo mismo que el ejemplo te tocará debugar y ver que se está guardando en este array en cada llamada recursiva:

      $files[] = $current;

      SAludos

  6. Fernando dice:

    Hola José quiero saber si podrás ayudarme con algo que no encuentro en la red. Estoy haciendo un editor para un blog y necesito señalar la ruta de unas imágenes de cabeceras de notas. Joomla tiene un botón que te permite recorrer el directorio y señalar la imagen guardando el path de la misma. Estoy buscando esa rutina, pero solo me salen resultados de como subir archivos al sitio. Las imágenes ya las subo por ftp, solo necesito que el usuario pueda buscarlas en el árbol de carpetas del sitio y cargar el path en una variable o un campo de texto del formulario. Muchas gracias.

  7. Saldaña dice:

    buenas tardes,
    yo busco un codigo que me permita moverme dentro de todos los directorios, carpetas e incluso llegar a la raiz del hosting. y tenga la opcion de descargar el archivo seleccionado y/o poder editar el archivo en el mismo hosting sin necesidad de descargarlo.
    claro tenga un usuario y clave que me pida al inicio. ejemplo mi ruta es:

    http://www.miweb.com/verlistado.php
    al ingresar a ese link me pida clave y usuario que yo eh colocado dentro de verlistado.php y al ser correcto recien me de como resultado la visualizacion de todos los archivos en esa carpeta y poder mover entre directorios.

    usted tendra ese script. a veces se me es complicado modificar algun cambio en la web . pues debo descargarlo y luego volver a subirlo mediante acceso al ftp.
    y es todo un tema.

    gracias espero me haya comprendido.

    • Jose Aguilar dice:

      Hola buenos días,

      Existe una herramienta que se instala en tu servidor que te permite administrar todos los ficheros. El problema es que ahora no recuerdo el nombre. Si buscas en google “administrador de archivos php” aparecen varias opciones que quizá te puedan interesar. File Thingie creo que es lo que buscas.

      Saludos

  8. Cesar rodriguez dice:

    hola, estoy utilizando tu codigo para buscar un archivo especifico y que despues me regrese la ruta, ya lo hice con esto>

    if(eregi(‘@-‘.$farchivo.’.pdf’, $path.$current)){
    $files[] = $current; }

    el problema que tengo es que quisiera que buscara otro archivo mas es decir archivo2, pero me manda error cada vez que lo intenta agregue esto
    if(eregi(‘@-‘.$farchivo.’.pdf’, $path.$current) || eregi(‘@-‘.$farchivo2.’.pdf’, $path.$current))

    y me manda error cuando encuentra los dos

    • Jose Aguilar dice:

      Hola,

      No he tenido la oportunidad de ver todo tu código pero yo lo que haría personalmente para este caso específico es hacer una función y llamarla 2 veces, una con cada archivo.

      Saludos

  9. Cesar rodriguez dice:

    Si gracias, fue por lo que opte, fue la solución mas rápida.

    Tengo otra pregunta, como puedo hacer la búsqueda de archivos en una unidad de red o memoria USB?

    Gracias por la pronta respuesta.
    Saludos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ver más sobre