我正在尝试创建目录中所有文件(及其大小)的列表,包括子目录中的所有内容。
这些文件位于远程服务器上。所以我的脚本通过 FTP 连接,然后使用以下命令运行递归函数ftp_chdir
浏览每个目录。
如果有其他方法可以做到这一点,我愿意接受建议。
$flist = array();
function recursive_list_dir($conn_id, $dir, $parent = "false") {
global $flist;
ftp_chdir($conn_id, $dir) or die("Fudgeballs: ".$parent."/".$dir);
$list = array();
$list = ftp_rawlist($conn_id, ".");
if($parent != "false") { $dir = $parent."/".$dir; }
for($x = 0; $x < count($list); $x++) {
$list_details = preg_split("/[\s]+/", $list[$x]);
$file = $list_details[3];
$size = $list_details[2];
if(!strstr($file, ".")) { // if there's no dot (.), then we assume it's a directory (is there a command similar to "is_dir" for FTP? that would be more fail proof?)
recursive_list_dir($conn_id, $file, $dir);
}
else { $flist[] = $dir."@".$file."@".$size; }
}
ftp_chdir($conn_id, "..");
}
recursive_list_dir($conn_id, ".");
该脚本在某种程度上运行良好,但现在不起作用。 PHP 返回一个错误ftp_chdir
。唯一改变的是我们向服务器添加了更多文件。如果我在子目录上运行该脚本,它就会起作用。但如果我在“.”上运行它它失败。那么这是因为文件和子目录太多而失败吗?
我还没有测试过这一点,但这是我不久前的做法:
$hostname = 'write.your.server.here';
$username = 'username';
$password = 'password';
$startdir = 'starting/directory'; // absolute path
$suffix = "gif,png,jpeg,pdf,php"; // suffixes to list
$files = array();
$conn_id = ftp_connect($hostname);
$login = ftp_login($conn_id, $username, $password);
if (!$conn_id) {
echo 'Wrong server!';
exit;
} else if (!$login) {
echo 'Wrong username/password!';
exit;
} else {
$files = raw_list("$startdir");
}
ftp_close($conn_id);
function raw_list($folder) {
global $conn_id;
global $suffix;
global $files;
$suffixes = explode(",", $suffix);
$list = ftp_rawlist($conn_id, $folder);
$anzlist = count($list);
$i = 0;
while ($i < $anzlist) {
$split = preg_split("/[\s]+/", $list[$i], 9, PREG_SPLIT_NO_EMPTY);
$itemname = $split[8];
$endung = strtolower(substr(strrchr($itemname ,"."),1));
$path = "$folder/$itemname";
if (substr($list[$i],0,1) === "d" AND substr($itemname,0,1) != ".") {
raw_list($path);
} else if(substr($itemname,0,2) != "._" AND in_array($endung,$suffixes)) {
array_push($files, $path);
}
$i++;
}
return $files;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)