is_dir没有按预期工作

Lut*_*hos 2 php arrays directory dir

当我迭代某个目录中的所有文件时,我在使用is_dir时遇到了问题.代码有点小,所以我想如果我发布它你会更好理解我的意思:

 $files = array();

 if ($dir = @opendir($folder)){ 

    while($file = readdir($dir)){

      if (is_dir($file)) $files[] = $file;  
    }        
    closedir($dir);    
}
print_r($files)
Run Code Online (Sandbox Code Playgroud)

它转储:([0] =>.)

否则,如果我不使用此代码检查文件是否为dir:

 $files = array();

if ($dir = @opendir($folder)){ 

    while($file = readdir($dir)){

      $files[] = $file;  
    }        
    closedir($dir);    
}
print_r($files)
Run Code Online (Sandbox Code Playgroud)

它转储了预期:([0] => .. [1] => bla [2] => blablabla [3] => index.php [4] => styles.css [5] =>.)

我想这只是使用$ file var作为参数的一些noob问题,但不知道如何使其工作.

谢谢阅读!

Cor*_*bin 6

正如Kolink在评论中所说,你可能会更好地走这glob条路,但如果你决定坚持使用opendir:

路径将是$ folder.'/'.$ file,而不仅仅是$ file.opendir()返回相对路径.所以is_dir在你的循环中返回false.

if ($dir = opendir($folder)){ 

    while(false !== ($file = readdir($dir))) {
        if ($file == '.' || $file == '..') {
            continue;
        } else if (is_dir($folder . '/' . $file)) {
            $files[] = $file;
        }
    }   

    closedir($dir);    

}
Run Code Online (Sandbox Code Playgroud)

另外,请注意false !==.这是必要的,因为名为"0"的文件夹将评估为false(或其他一些边缘情况).此外,你很少真正关心...,所以代码在那里过滤...出去.