Volver a la página principal
lunes 4 noviembre 2024
19

Cómo encontrar archivos con patrones específicos en PHP con glob()

La función glob() en PHP permite buscar archivos y directorios que coincidan con un patrón específico, utilizando comodines al estilo de los sistemas Unix. Es muy útil para listar archivos que cumplen ciertos criterios en un directorio, como extensiones de archivo o partes de nombres.

¿Qué es glob() en PHP?

glob() busca archivos o directorios en el sistema de archivos que coincidan con un patrón de búsqueda. Permite usar comodines como (cualquier número de caracteres) y ? (un solo carácter), facilitando la búsqueda de archivos por nombre, extensión, etc.

Sintaxis

array glob ( string $pattern [, int $flags = 0 ] )
  • pattern: El patrón de búsqueda, que puede incluir comodines.
  • flags (opcional): Modificadores para cambiar el comportamiento de la búsqueda.

Comodines y patrones comunes

  • : Coincide con cualquier número de caracteres.
  • ?: Coincide con un único carácter.
  • abc]: Coincide con cualquiera de los caracteres dentro de los corchetes.
  • !abc]: Coincide con cualquier carácter que no esté dentro de los corchetes.

Flags opcionales

Flag Descripción
GLOB_MARK Añade una barra (/) al final de cada nombre de directorio.
GLOB_NOSORT No ordena los resultados (mejor rendimiento).
GLOB_NOCHECK Devuelve el patrón sin coincidencias si no se encuentra ningún archivo.
GLOB_ONLYDIR Devuelve solo directorios que coinciden con el patrón.
GLOB_BRACE Expande patrones como {a,b} para coincidir con a o b (no en todos los sistemas).

Valores de retorno

Devuelve un array con los nombres de los archivos o directorios que coinciden con el patrón. Si no se encuentran coincidencias, devuelve un array vacío.

Ejemplo básico de uso de glob()

Este ejemplo muestra cómo usar glob() para encontrar todos los archivos .txt en el directorio actual:

<?php
$archivos_txt = glob("*.txt");

print_r($archivos_txt);
// Resultado esperado: Array con todos los archivos .txt en el directorio actual

Ejemplo con búsqueda en subdirectorios

Para buscar archivos en una ruta específica, inclúyela en el patrón. Este ejemplo busca archivos .jpg en el directorio imagenes:

<?php
$imagenes_jpg = glob("imagenes/*.jpg");

print_r($imagenes_jpg);
// Resultado esperado: Array con todos los archivos .jpg en el directorio "imagenes"

Uso de varios comodines en glob()

Puedes usar múltiples comodines para buscar archivos que cumplan con criterios más específicos. Por ejemplo, el siguiente código busca archivos que comienzan con "archivo_" y terminan en ".log":

<?php
$archivos_log = glob("archivo_*.log");

print_r($archivos_log);
// Resultado: Array con archivos que cumplen el patrón "archivo_*.log"

Ejemplo con flag GLOB_ONLYDIR

Si solo quieres listar directorios y no archivos, puedes usar el flag GLOB_ONLYDIR:

<?php
$directorios = glob("carpeta/*", GLOB_ONLYDIR);

print_r($directorios);
// Resultado: Array con los nombres de los directorios en "carpeta"

Ejemplo con brace expansion (GLOB_BRACE)

La brace expansion permite especificar varios patrones en una sola búsqueda. Este ejemplo encuentra archivos con extensiones .jpg o .png:

<?php
$imagenes = glob("imagenes/*.{jpg,png}", GLOB_BRACE);

print_r($imagenes);
// Resultado: Array con archivos .jpg y .png en el directorio "imagenes"
Nota: La opción GLOB_BRACE puede no estar disponible en todos los sistemas operativos.

Ejemplo práctico: Listar archivos con varios filtros

Aquí combinamos varios patrones y flags para obtener una lista de archivos que empiecen con data_ y tengan la extensión .json en el directorio datos, incluyendo un slash (/) al final si es un directorio.

<?php
$archivos_json = glob("datos/data_*.json", GLOB_MARK);

print_r($archivos_json);
// Resultado: Array con archivos y directorios terminados en ".json" en el directorio "datos"

Referencia oficial

Para más información sobre glob() en PHP, consulta la documentación oficial de PHP.

Etiquetas:
php
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer