如何按修改时间排序FTP文件夹中的文件

问题描述 投票:1回答:1

我想用ftp_nlist函数获取FTP文件夹中的所有文件。

但默认情况下,它返回按名称排序的数组。

我想按最后修改时间对它们进行排序。我试图在文件夹路径之前添加-lt,但它只是在每个文件名之前添加日期时间。

请帮我!

php ftp
1个回答
2
投票

没有标准方法让FTP服务器根据您(或任何)标准对文件进行排序。

虽然一些FTP服务器,特别是ProFTPD和vsftpd,使用LIST / NLST命令支持专有标志来对条目进行排序。

这两个服务器都支持-t标志,以按修改时间对文件进行排序:

LIST -t

虽然这不仅是非标准的,但它实际上违反了FTP协议。

有关ProFTPD支持的所有选项,请参见其手册页: http://www.proftpd.org/docs/directives/linked/config_ref_ListOptions.html

请注意,vsftpd仅支持-a-r-t-F-l,其含义与ProFTPD相同。


如果您的服务器不支持-t开关(或类似),您唯一的选择是按原样检索具有文件属性的列表并在本地对其进行排序。

为此,您不能使用ftp_nlist,因为它只返回文件名。

理想的解决方案是使用MLSD FTP命令返回可靠的机器可读目录列表。但PHP仅支持7.2以及ftp_mlsd function。检查"modify"条目。

或者,在MLSD命令的用户注释中有ftp_rawlist的实现: https://www.php.net/manual/en/function.ftp-rawlist.php#101071

在采用这种方法之前,首先检查您的FTP服务器是否支持MLSD,因为并非所有FTP服务器都这样做(特别是IIS and vsftpd don't)。

或者,您可以使用ftp_rawlist。虽然它返回了文件的专有列表,但是很难解析。但是,如果您只需要支持一个特定的服务器,则可以对该服务器的解析进行硬编码。

© www.soinside.com 2019 - 2024. All rights reserved.