如何解决使用PHP从FTP获取目录结构
我的ftp服务器中有很多子文件夹和文件。我需要从ftp检索文件夹结构,该结构显示指定起始路径中所有文件夹和子文件夹的名称。我对每个文件夹中包含的文件不感兴趣,仅对目录树不感兴趣。我正在使用PHP,并且我的服务器不支持mlsd。
感谢帮助。
function ftp_list_files_recursive($ftp_stream,$path) {
$lines = ftp_rawlist($ftp_stream,$path);
$result = [];
if (is_array($lines) || is_object($lines)) {
foreach ($lines as $line) {
$exp0 = explode('<',$line);
if (sizeof($exp0) > 1):
$exp1 = explode('>',$exp0[1]);
if ($exp1[0] == 'DIR') {
$file_path=$path . "/" . ltrim($exp1[1]);
$result = array_merge($result,ftp_list_files_recursive($ftp_stream,$file_path));
} else {
$result[] = $file_path;
}
endif;
}
}
return $result;
}
ftp_rawlist
返回的目录信息为:01-18-20 01:00PM <DIR> DirName
,因此首先我在<
爆炸并检查是否成功。如果是,则表示字符串中包含DIR
,并且可以在>
上进行进一步分解。可以用正则表达式来完成,但是现在对我有用。如果我打印$file_path
变量,我会看到它发生了变化,因此我假定递归有效。但是,$result
数组始终为空。有什么想法吗?
解决方法
从此处开始:PHP FTP recursive directory listing。
您只需要将代码调整为:
- 您从FTP服务器(可能是IIS)获得的DOS样式列表,并且
- 仅收集文件夹。
function ftp_list_dirs_recursive($ftp_stream,$directory)
{
$result = [];
$lines = ftp_rawlist($ftp_stream,$directory);
if ($lines === false)
{
die("Cannot list $directory");
}
foreach ($lines as $line)
{
// rather lame parsing as a quick example:
if (strpos($line,"<DIR>") !== false)
{
$dir_path = $directory . "/" . ltrim(substr($line,strpos($line,">") + 1));
$subdirs = ftp_list_dirs_recursive($ftp_stream,$dir_path);
$result = array_merge($result,[$dir_path],$subdirs);
}
}
return $result;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。