我正在尝试为主文件夹中的每个目录构建一个<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
错误,我在互联网上搜索了它的含义,我最终得到的只是技术支持,我很难理解。
答案 0 :(得分:4)
你的问题是在“folder”目录下你可以有两个目录(a和b),然后读取检索“a”和“b”作为文件名,而is_dir接收完整路径文件名或相对文件名,你有两个选择:
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