1

哇,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;
}
4

1 回答 1

0

当 opendir 失败时,您的循环似乎正在逃跑。您可以尝试像这样测试返回值:

if(!($handle= opendir($directory))) {
        echo "Could not opendir($directory)\n";
        return false;
}
于 2013-06-20T15:28:09.777 回答