Cómo obtener archivos en la carpeta FTP ordenados por hora de modificación

Quiero obtener todos los archivos en una carpeta FTP con la función ftp_nlist .

Pero por defecto devuelve una matriz ordenada por nombre.

Quiero ordenarlos por última vez modificada. Intenté agregar -lt antes de la ruta de una carpeta, pero solo agrega la fecha y hora antes de cada nombre de archivo.

¡Por favor, ayúdame!

No hay una manera estándar de que el servidor FTP clasifique los archivos de acuerdo con su criterio (o cualquiera).

Aunque algunos servidores FTP, especialmente ProFTPD y vsftpd, admiten indicadores propietarios con el comando LIST / NLST para ordenar las entradas.

Ambos servidores admiten la -t para ordenar los archivos por una hora de modificación:

 LIST -t 

Aunque esto no solo es no estándar, en realidad viola el protocolo FTP.

Para todas las opciones soportadas por ProFTPD, vea su página de manual:
http://www.proftpd.org/docs/directives/linked/config_ref_ListOptions.html

Tenga en cuenta que vsftpd solo admite -a , -r , -t , -F y -l con el mismo significado que ProFTPD.


Si su servidor no es compatible con el -t (o similar), su única opción es recuperar la lista con los atributos de archivo tal como están y clasificarlos localmente.

Para esto no puede usar ftp_nlist , ya que solo devuelve nombres de archivos.

La solución ideal es utilizar el MLSD FTP de MLSD que devuelve una lista de directorios confiable y legible por máquina. Pero PHP admite eso solo desde 7.2 con su función ftp_mlsd . Compruebe la entrada "modify" .

O bien, hay una implementación de la MLSD en los comentarios de los ftp_rawlist comando ftp_rawlist :
https://www.php.net/manual/en/function.ftp-rawlist.php#101071

Primero verifique si su servidor FTP es compatible con MLSD antes de adoptar este enfoque, ya que no todos los servidores FTP lo hacen (particularmente IIS y vsftpd ).

O bien, puede utilizar ftp_rawlist . A pesar de que devuelve una lista de archivos de propiedad, eso puede ser difícil de analizar. Pero si necesita admitir solo un servidor específico, puede progtwigr el análisis para ese servidor.