检查FTP条目是否是包含PHP

时间:2015-04-22 13:31:41

标签: php ftp

我正在制作一个用于连接FTP的脚本,然后下载内容。

现在我的问题是检测每个项目是文件夹还是文件。 我的第一个想法是尝试使用ftp_chdir,但这需要我使用@来抑制错误,我不希望这样做(我不希望抑制错误,但是而是喜欢正确处理它们。)

还有其他方法可以检查我的商品是文件还是文件夹?

1 个答案:

答案 0 :(得分:3)

尝试ftp_chdir的坏处不是要压制错误。没关系,只要你有合理的理由期待错误。这是改变目录的副作用。

如果我采取这个方向,我会尝试ftp_size,因为它没有任何副作用。它应该失败的目录和成功的文件。

理想的解决方案是使用MLSD FTP命令返回可靠的机器可读目录列表。但PHP仅支持自ftp_mlsd function以来的7.2。查看"type"条目中的dir值。

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

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

或者,如果您要连接到一个特定的服务器,因此您知道其目录列表的格式,您可以使用ftp_rawlist,并解析其输出以确定条目是文件还是文件夹。

* nix服务器上的典型列表如下:

drwxr-x---   3 vincent  vincent      4096 Jul 12 12:16 public_ftp
drwxr-x---  15 vincent  vincent      4096 Nov  3 21:31 public_html
-rwxrwxrwx   1 vincent  vincent        11 Jul 12 12:16 file.txt

这是领先的d告诉您,条目是否是目录。

您可能很幸运,在您的具体情况下,您可以通过文件名告知目录中的文件(即所有文件都有扩展名,而子目录则没有)。