检查 FTP 条目是否为带有 PHP 的文件或文件夹
Check if FTP entry is file or folder with PHP
我正在编写用于连接到 FTP 然后下载内容的脚本。
现在我的问题是检测每个项目是文件夹还是文件。
我的第一个想法是尝试使用 ftp_chdir
,但这需要我使用 @
来抑制错误,而我不想这样做(我不想抑制错误,但是相反更喜欢正确处理它们)。
还有其他方法可以检查我的项目是文件还是文件夹吗?
尝试 ftp_chdir
的坏处不是需要抑制错误。没关系,只要您有合理的理由预计会出现错误。这是更改目录的副作用。
如果我选择那个方向,我会尝试 ftp_size
,因为它没有任何副作用。目录应该失败,文件应该成功。
理想的解决方案是使用 MLSD
FTP 命令,即 returns 可靠的机器可读目录列表。但是 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 服务器都支持(尤其是 )。
或者,如果您连接到一个特定的服务器,那么您知道其目录列表的格式,您可以使用 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
告诉您条目是否为目录。
您可能很幸运,在您的特定情况下,您可以通过文件名从目录中区分文件(即所有文件都有扩展名,而子目录没有)。
万一有人在 2018 年需要这个+
您可以使用 ftp_nlist。
对于文件,您将检索只有一个元素(文件路径本身)的数组,对于目录,您将在数组 .
和 ..
中至少有两个项目,如果那里不存在文件或目录将返回一个空数组。
我正在编写用于连接到 FTP 然后下载内容的脚本。
现在我的问题是检测每个项目是文件夹还是文件。
我的第一个想法是尝试使用 ftp_chdir
,但这需要我使用 @
来抑制错误,而我不想这样做(我不想抑制错误,但是相反更喜欢正确处理它们)。
还有其他方法可以检查我的项目是文件还是文件夹吗?
尝试 ftp_chdir
的坏处不是需要抑制错误。没关系,只要您有合理的理由预计会出现错误。这是更改目录的副作用。
如果我选择那个方向,我会尝试 ftp_size
,因为它没有任何副作用。目录应该失败,文件应该成功。
理想的解决方案是使用 MLSD
FTP 命令,即 returns 可靠的机器可读目录列表。但是 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 服务器都支持(尤其是
或者,如果您连接到一个特定的服务器,那么您知道其目录列表的格式,您可以使用 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
告诉您条目是否为目录。
您可能很幸运,在您的特定情况下,您可以通过文件名从目录中区分文件(即所有文件都有扩展名,而子目录没有)。
万一有人在 2018 年需要这个+
您可以使用 ftp_nlist。
对于文件,您将检索只有一个元素(文件路径本身)的数组,对于目录,您将在数组 .
和 ..
中至少有两个项目,如果那里不存在文件或目录将返回一个空数组。