用PHP检查FTP条目是否为文件或文件夹

用PHP检查FTP条目是否为文件或文件夹,php,ftp,Php,Ftp,我正在编写一个脚本,用于连接到FTP,然后下载内容 现在我的问题是检测每个项目是文件夹还是文件。 我的第一个想法是尝试使用ftp\u chdir,但这需要我使用@抑制错误,我不希望这样做(我不希望抑制错误,而是希望正确处理错误) 是否有其他方法可以检查“我的项目”是文件还是文件夹?尝试ftp\u chdir的坏处不是需要抑制错误。这没关系,只要你有合理的理由期待一个错误。这是更改目录的副作用 如果我朝这个方向走,我会试试这个,因为它没有任何副作用。对于目录,它应该失败;对于文件,它应该成功 理

我正在编写一个脚本,用于连接到FTP,然后下载内容

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


是否有其他方法可以检查“我的项目”是文件还是文件夹?

尝试
ftp\u chdir
的坏处不是需要抑制错误。这没关系,只要你有合理的理由期待一个错误。这是更改目录的副作用

如果我朝这个方向走,我会试试这个,因为它没有任何副作用。对于目录,它应该失败;对于文件,它应该成功


理想的解决方案是使用
MLSD
FTP命令返回可靠的机器可读目录列表。但是PHP仅从7.2版本开始就支持它。检查
“type”
条目中的
dir

或者,在
ftp\u rawlist
命令的用户注释中有
MLSD
的实现:

在采用此方法之前,首先检查您的FTP服务器是否支持
MLSD
,并非所有FTP服务器都支持(尤其是)


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

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

drwxr-x---3文森特·文森特4096年7月12日12:16公开
drwxr-x---15文森特·文森特4096年11月3日21:31公开
-rwxrwx 1文森特文森特11 7月12日12:16 file.txt
引导的
d
告诉您条目是否为目录



您可能很幸运,在您的特定情况下,您可以通过文件名从目录中区分文件(即,您的所有文件都有扩展名,而子目录没有扩展名)。

以防2018年有人需要此扩展名+

你可以用。
对于只有一个元素(文件路径本身)的文件,您将检索数组;对于目录,您将在数组
中至少有两个项。
,如果不存在文件或目录,将返回一个空数组。

尝试使用
的文件/文件夹的每个名称上使用
(点)作为分离器;Ashwani:很遗憾,文件夹名称中可能有点User1844933:is_dir()似乎不适用于ftp函数。我决定使用ftp_rawlist并检查每一行。看来效果不错。我使用的所有服务器都运行Nix。谢谢这确实是一些FTP服务器的行为。但它无法跨各种服务器进行移植。而且它肯定没有FTP规范的支持(该规范不允许“列出”文件)。