我正在制作一个用于连接FTP的脚本,然后下载内容。
现在我的问题是检测每个项目是文件夹还是文件。
我的第一个想法是尝试使用ftp_chdir
,但这需要我使用@
来抑制错误,我不希望这样做(我不希望抑制错误,但是而是喜欢正确处理它们。)
还有其他方法可以检查我的商品是文件还是文件夹?
答案 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
告诉您,条目是否是目录。
您可能很幸运,在您的具体情况下,您可以通过文件名告知目录中的文件(即所有文件都有扩展名,而子目录则没有)。