我想获取具有ftp_nlist
功能的 FTP 文件夹中的所有文件。
但默认情况下,它返回一个按名称排序的数组。
我想按上次修改时间对它们进行排序。我试图-lt
在文件夹路径之前添加,但它只是在每个文件名之前添加日期时间。
请帮我!
没有标准方法可以让 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
MLSD
在采用这种方法之前,首先检查您的 FTP 服务器是否支持,因为并非所有 FTP 服务器都支持(特别是IIS 和 vsftpd 不支持)。
或者,您可以使用ftp_rawlist
. 虽然它返回文件的专有列表,但可能难以解析。但是如果您只需要支持一个特定的服务器,您可以对该服务器的解析进行硬编码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句