哇,StackOverFlow 做得很好,甚至在我输入标题时 AJAX 搜索主题和回答问题。真正有价值的程序员。
代码如下。当我将最大递归设置为 0 时,它工作得很好。所以很明显问题出在我的递归代码中。但我找不到它。
我认为 opendir 可能会返回一个全局句柄,并且我在下一次递归中踩到它,所以我将递归设置在 opendir 句柄之外。没有在句柄打开的情况下调用递归,并且当最大递归大于零时它仍然不产生任何结果。我什至添加了一个最大打开目录。如您所见,该变量通过递归传递,如果 $maxopendir 为零,它将不会 opendir。如果那是问题,我仍然会得到一些回报。但是我什么也没得到,除非当然 $maxrecursions 为 0,否则它很好,并返回 HOME 目录中与搜索词匹配的所有文件或目录名称。
任何递归专家可以纠正我吗?
$dircontent.= searchalldirectories(HOME, $_POST['search'], 0, 5);
function searchalldirectories($directory, $seachterm, $maxrecursions, $maxopendir){
$dircontent= '';
$dirs= array();
if ($maxopendir>0){
$maxopendir--;
$handle= opendir($directory);
while (($dirlisting= readdir($handle))!==false){
$dn= ''; $fn= ' File';
if (is_dir($directory.'/'.$dirlisting) && $maxrecursions>0){
$dirs[count($dirs)]= $directory.'/'.$dirlisting;
$dn= '/'; $fn= 'Dir';
}
if (stripos($dirlisting, $seachterm)!==false){
$dircontent.= '<input type="image" src="go.jpg" name="cmd" value="home:/'.$dirlisting.'"> '.$fn.':// <b>'.$dirlisting.$dn.'/</b><br>';
}
}
closedir($handle);
for ($i=0; $i<count($dirs); $i++){
$dircontent.= searchalldirectories($dirs[$i], $s, ($maxrecursions-1), $maxopendir);
}
}
return $dircontent;
}