is_dir没有按预期工作

时间:2012-05-07 21:26:57

标签: 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)

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

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

 $files = array();

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

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

      $files[] = $file;  
    }        
    closedir($dir);    
}
print_r($files)

它转储了预期: ([0] =&gt; .. [1] =&gt; bla [2] =&gt; blablabla [3] =&gt; index.php [4] =&gt; styles.css [5] =&gt;。)< / p>

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

感谢阅读!

3 个答案:

答案 0 :(得分: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);    

}

另请注意false !==。这是必要的,因为名为“0”的文件夹将评估为false(或其他一些边缘情况)。此外,您很少真正关心...,因此可以使用代码来过滤...

答案 1 :(得分:4)

问题是:$ file只包含basename,而不是绝对文件名。因此,请在文件夹前添加路径:

is_dir($folder . '/' . $file)

答案 2 :(得分:0)

JFrame frame = new JFrame();
frame.setUndecorated(true);
frame.setBackground(new java.awt.Color(0, 0, 0, 0));
final JFXPanel fxPanel = new JFXPanel();
frame.add(fxPanel);
frame.setSize(422, 116);
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
fxPanel.setScene(scene);
frame.setResizable(false);
frame.setAlwaysOnTop(true);
frame.setFocusableWindowState(false); // <- Here is the secret
frame.setVisible(true);