我正在编写用于连接到 FTP 的脚本,然后下载内容。
现在我的问题是检测每个项目是文件夹还是文件。
我的第一个想法是尝试使用 ftp_chdir
,但这需要我使用 @
来抑制错误,我不想这样做(我不希望抑制错误,但更愿意正确处理它们)。
还有其他方法可以检查我的项目是文件还是文件夹吗?
最佳答案
尝试 ftp_chdir
的坏处不是需要抑制错误。没关系,只要您有合理的理由预计会出现错误。这是更改目录的副作用。
如果我选择那个方向,我会尝试 ftp_size
相反,因为它没有任何副作用。它应该对目录失败,对文件成功。
理想的解决方案是使用返回可靠的机器可读目录列表的 MLSD
FTP 命令。但是 PHP 仅从 7.2 开始支持它的 ftp_mlsd
function .检查 "type"
条目的 dir
值。
或者,ftp_rawlist
命令的用户评论中有一个MLSD
的实现:
https://www.php.net/manual/en/function.ftp-rawlist.php#101071
在采用这种方法之前,首先检查您的 FTP 服务器是否支持 MLSD
,因为并非所有 FTP 服务器都支持(特别是 IIS and vsftpd don't)。
或者,如果你连接到一个特定的服务器,那么你知道它的目录列表格式,你可以使用 ftp_rawlist
,并解析其输出以确定条目是文件还是文件夹。
*nix 服务器上的典型 list 如下:
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
告诉您条目是否是目录。
您可能很幸运,在您的特定情况下,您可以通过文件名从目录中区分文件(即所有文件都有扩展名,而子目录没有)。
关于php - 使用 PHP 检查 FTP 条目是文件还是文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29799181/