递归搜索目录php

时间:2013-06-20 15:17:32

标签: php search recursion directory

哇,StackOverFlow甚至可以很好地完成AJAX主题搜索,并在输入标题时回答问题。真正有价值的程序员。

代码如下。当我将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;
}

1 个答案:

答案 0 :(得分:0)

当opendir失败时,你的循环似乎正在逃避。您可以尝试测试返回值,如下所示:

if(!($handle= opendir($directory))) {
        echo "Could not opendir($directory)\n";
        return false;
}