在php中扫描目录时,is_dir()失败

时间:2011-08-11 16:29:32

标签: php file-type scandir

我正在尝试为主文件夹中的每个目录构建一个<ul>列表,其中包含<li>。 这是我的代码:

<?php

$dir = opendir(getEnv("DOCUMENT_ROOT") . "/folder");

while(($file = readdir($dir)) !== false ){
  if( is_dir($file) && $file !== "." && $file !== ".." ){
    echo "<li>" . $file . "</li>";
  }
}

closedir($dir);

?>

/ home / example /文件夹中有两个目录但是没有被识别为文件夹(确定它们是!)

如果我“echo”while循环中的文件被打印出来(它们很好地存在于脚本中没有问题)。 如果我尝试“filetype”他们,会抛出lstat failed错误,我在互联网上搜索了它的含义,我最终得到的只是技术支持,我很难理解。

2 个答案:

答案 0 :(得分:4)

你的问题是在“folder”目录下你可以有两个目录(a和b),然后读取检索“a”和“b”作为文件名,而is_dir接收完整路径文件名或相对文件名,你有两个选择:

  1. 将文件名的完整路径传递给is_dir函数(参见示例代码)。
  2. 传递相对路径(取决于您放置脚本的位置)。
  3. if( is_dir($dir . "/" . $file) && $file !== "." && $file !== ".." ){ ......
    

答案 1 :(得分:0)

尝试:

while($file = readdir($dir)) {
   if (...) { }
}

不需要!== false部分。如果readdir到达结尾,则返回false,循环将自动终止。您的版本被解析为:

$file gets the value of (readdir($file) is not false)

e.g。你要分配readdir($file) !== false的布尔结果,而不是readdir的返回值。


扩展我的评论,关于operator precedence

PHP的循环设置解析树看起来像这样,展开了:

$bool = (readdir($dir) !== false);
$file = $bool;

要解决此问题,请完全删除!== false部分,或使用额外括号强制执行您自己的优先级:

($file = readdir($dir)) !== false