¿Sigues usando opendir () para recorrer las carpetas en PHP? ¿No requiere eso un montón de código repetitivo cada vez que desea buscar una carpeta? Por suerte, el glob () de PHP es una solución mucho más inteligente..
Este es un ejemplo de cómo hacer eco de cierta información de una carpeta, utilizando la función tradicional opendir ().
$ dir = "/ etc / php5 /"; // Abra un directorio conocido y continúe leyendo su contenido si (is_dir ($ dir)) if ($ dh = opendir ($ dir)) while (($ file = readdir ($ dh))! == ) echo "filename: $ file: filetype:". tipo de archivo ($ dir. $ archivo). "\norte"; closedir ($ dh);
Eso debería parecer algo familiar. Podemos acortar masivamente el código anterior con:
$ dir = "/ etc / php5 / *"; // Abra un directorio conocido y continúe leyendo su contenido foreach (glob ($ dir) como $ file) echo "filename: $ file: filetype:". tipo de archivo ($ archivo). "
";
¿No es eso mucho más fácil? ¿Tienes ganas de aprender cómo funciona el método? Si es así, entonces sigamos adelante.
glob () admite un total de dos argumentos, con el segundo argumento opcional. El primer argumento es la ruta a la carpeta, sin embargo, es un poco más potente que eso..
Este primer argumento soporta un patrón. Esto significa que puede limitar la búsqueda a tipos de archivos específicos o incluso a varios directorios al mismo tiempo utilizando varios asteriscos "*". Supongamos que tiene un sitio web que permite a los usuarios cargar imágenes (solo porque leí esto). Cada usuario tiene su propia carpeta dentro de la carpeta "userImages". Dentro de estas carpetas hay dos carpetas adicionales, llamadas "HD" y "TN", para imágenes de alta definición (tamaño completo) y para miniaturas. Imaginemos que desea recorrer todas las carpetas "TN" de sus usuarios e imprimir los nombres de archivo. Esto requeriría un fragmento de código relativamente grande si tuviera que usar open_dir (); Sin embargo, con glob (), es fácil..
foreach (glob ('userImages / * / TN / *') como $ image) echo "Nombre de archivo:". $ imagen. "
";
Esto buscará en userImages / any / TN / any y devolverá una lista de los archivos que coinciden con el patrón.
Nombre de archivo: userImages / username1 / TN / test.jpg Nombre de archivo: userImages / username1 / TN / test3.jpg Nombre de archivo: userImages / username1 / TN / test5.png Nombre de archivo: userImages / username2 / TN / subfolder Nombre de archivo: userImages / username2 / TN / test2.jpg Nombre de archivo: userImages / username2 / TN / test4.gif Nombre de archivo: userImages / username3 / TN / styles.css
Incluso podemos llevar las cosas un paso más allá y ser más específicos al incluir un formato de archivo en nuestra declaración foreach:
foreach (glob ('userImages / * / TN / *. jpg') como $ image) echo "Nombre de archivo:". $ imagen. "
";
Ahora, esto solo devolverá Jpegs..
Nombre de archivo: userImages / username1 / TN / test.jpg Nombre de archivo: userImages / username1 / TN / test3.jpg Nombre de archivo: userImages / username2 / TN / test2.jpg
Se pone aún mejor. ¿Qué pasa si, por ejemplo, necesita Jpegs, pero también Gifs; ¿nada más? O ¿qué pasa si desea imprimir sólo los nombres de las carpetas? Aquí es donde entra en juego el segundo argumento..
El segundo argumento es, como se mencionó anteriormente, opcional. Sin embargo, proporciona un conjunto muy agradable de indicadores opcionales. Esto te permitirá cambiar la forma en que se comporta tu glob ()..
Como puede ver, los posibles requisitos que señalamos al final del Paso 1 se pueden solucionar fácilmente con GLOB_BRACE:
foreach (glob ('userImages / * / TN / *. jpg, *. gif', GLOB_BRACE) como $ image) echo "Filename:". $ imagen. "
";
que devolverá esto:
Nombre de archivo: userImages / username1 / TN / test.jpg Nombre de archivo: userImages / username1 / TN / test3.jpg Nombre de archivo: userImages / username2 / TN / test2.jpg Nombre de archivo: userImages / username2 / TN / test4.gif
Si deseamos imprimir solo los nombres de las subcarpetas, podríamos usar GLOB_ONLYDIR:
foreach (glob ('userImages / * / TN / *', GLOB_ONLYDIR) como $ image) echo "Nombre de archivo:". $ imagen. "
";
que se imprimirá:
Nombre de archivo: userImages / username2 / TN / subfolder
Este método ha estado disponible desde PHP 4.3, sin embargo, no se usa muy a menudo, de forma extraña. No lo aprendí hasta bastante tarde yo mismo. Ahora, a menudo uso glob () al cargar complementos en mi marco:
foreach (glob ('includes / plugins / *. php') como $ plugin) include_once ($ plugin);
Eso es todo; Espero que hayan disfrutado de este consejo rápido, y háganme saber si tienen alguna pregunta.!