使用PHP的FTP递归目录列表

问题描述 投票:0回答:1

我正在尝试从ftp服务器(从特定文件夹)获取所有目录和子目录,并在我的域中列出它们。在域上,单击(如果有)文件夹,然后继续打开它。如果有文件,请下载。它是递归的。

您能帮我吗?非常感谢!

php ftp
1个回答
0
投票

如果服务器支持MLSD命令,并且您具有PHP 7.2或更高版本,则可以使用ftp_mlsd function

ftp_mlsd

如果没有PHP 7.2,则可以尝试自行实现function ftp_mlsd_recursive($ftp_stream, $directory) { $result = []; $files = ftp_mlsd($ftp_stream, $directory); if ($files === false) { die("Cannot list $directory"); } foreach ($files as $file) { $name = $file["name"]; $filepath = $directory . "/" . $name; if (($file["type"] == "cdir") || ($file["type"] == "pdir")) { // noop } else if ($file["type"] == "dir") { $result = array_merge($result, ftp_mlsd_recursive($ftp_stream, $filepath)); } else { $result[] = $filepath; } } return $result; } 命令。首先,请参见MLSD命令的用户注释:ftp_rawlist


如果无法使用https://www.php.net/manual/en/function.ftp-rawlist.php#101071,则特别难以确定是否为MLSD。尽管您可以像使用entry is a file or folder一样使用技巧,但为每个条目调用ftp_size可能需要一段时间。

但是,如果您只需要使用一个特定的FTP服务器,则可以使用ftp_size检索平台特定格式的文件列表并进行解析。

以下代码假定使用通用的* nix格式。

ftp_size
© www.soinside.com 2019 - 2024. All rights reserved.