代码如下。当我将max recursion设置为0时,它工作得很好。所以很明显问题出现在我的递归代码中。但我找不到它。
我认为opendir可能返回一个全局句柄,我在下一次递归时踩到它,所以我在opendir句柄之外设置递归。句柄打开时不会调用递归,当最大递归大于零时,它仍然不会产生任何内容。我甚至添加了一个最大打开的目录。当你看到变量向下传递递归时,如果$ maxopendir为零,它将不会打开。如果这是问题,我仍然会得到一些回报。但我什么都没得到,除非当然$ 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;
}
答案 0 :(得分:0)
当opendir失败时,你的循环似乎正在逃避。您可以尝试测试返回值,如下所示:
if(!($handle= opendir($directory))) {
echo "Could not opendir($directory)\n";
return false;
}