我希望将所有文件都放在具有ftp_nlist
功能的FTP文件夹中。
但默认情况下,它返回按名称排序的数组。
我想按上次修改时间对它们进行排序。我尝试在文件夹路径之前添加-lt
,但它只是在每个文件名之前添加日期时间。
请帮助我!
答案 0 :(得分: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仅支持自ftp_mlsd
function以来的7.2。查看"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
。虽然它返回了文件的专有列表,但是很难解析。但是,如果您只需要支持一个特定的服务器,则可以对该服务器的解析进行硬编码。