Ordenando archivos PHP: glob, scandir y fechas

En programación, saber cómo listar archivos es fundamental para procesar contenido dinámico. En PHP, tenemos varias herramientas a nuestra disposición para lograr esto. El punto de partida más común suele ser la función glob(). Esta función nos permite filtrar archivos por extensión directamente desde una cadena de patrones.

Diagrama técnico mostrando las diferencias entre los métodos glob, scandir y FilesystemIterator para la gestión de archivos.
Comparativa visual entre glob, scandir y FilesystemIterator para listar archivos en PHP.

Sin embargo, el usuario rápidamente notó que glob() devuelve simplemente un array de nombres y no permite ordenarlos directamente por criterios como la fecha o el tamaño. La solución práctica aquí es combinar esta función con usort(). Al aplicar usort(), podemos definir una lógica personalizada para reordenar los resultados según lo necesitemos.

Ahora bien, ¿qué pasa si queremos obtener la fecha de un archivo desde su URL? Aquí es donde el análisis se vuelve interesante. Si estamos trabajando con archivos remotos accesibles por HTTP o HTTPS, no podemos usar funciones locales como filemtime(). En su lugar, debemos consultar las cabeceras HTTP que devuelve el servidor web.

El método más directo para esto es utilizar la función get_headers(), específicamente buscando la cabecera Last-Modified.

Ilustración técnica del proceso de obtener la fecha de modificación desde una URL remota.
Cómo extraer la fecha de un archivo remoto usando las cabeceras HTTP.

Es importante destacar que no todos los servidores envían esta cabecera, y si el archivo está alojado en un CDN o caché, la fecha podría no reflejar la realidad. Por otro lado, si el archivo está localmente en disco, podemos usar filemtime(), filectime() o incluso stat() para obtener toda la información del sistema de archivos.

Finalmente, se abordó una duda específica sobre cómo cambiar la lógica de ordenamiento. El código original que el usuario tenía era: usort($imagenes, function($a, $b) { return filemtime($b) - filemtime($a); });. Se preguntaba qué significaba esto y cómo lograr un orden inverso.

La respuesta es clara: restar la fecha de un archivo más antiguo a una más nueva genera un número positivo, lo que le indica al sistema que el primero debe ir antes. Por tanto, esa lógica ya está ordenando del más nuevo al más viejo. Si se quisiera invertir el orden, simplemente se cambiaría el signo de la resta.

En conclusión, PHP ofrece múltiples caminos para gestionar archivos: desde las funciones globales estándar hasta el uso avanzado de iteradores SPL. Cada enfoque tiene sus ventajas dependiendo de si buscas simplicidad o control total sobre los metadatos del sistema de archivos.