我正在尝试从ftp服务器(从特定文件夹)获取所有目录和子目录,并在我的域中列出它们。在域上,单击(如果有)文件夹,然后继续打开它。如果有文件,请下载。它是递归的。
您能帮我吗?非常感谢!
如果服务器支持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