php readdir and is_dir
我正在测试目录处理的功能。我有一个包含以下内容的折叠/目录:
0 文件夹
false 文件夹
my_pictures 文件夹
MVI_3094 mov 文件
img01 jpeg 图片
等…
我写了如下代码遍历目录,打印出具体的resutls
1 2 3 4 5 6 7 8 9 10 11 12
|
$handle = opendir("files/");
while(($entry = readdir($handle)) !== false)
{
if($entry =="." || $entry =="..")
{
continue;
}
if(is_dir($entry))
{
echo"Directory:$entry<br />";
}
}
|
我唯一的问题是第二个”if”语句没有输出
的结果
1
|
echo"Directory:$entry<br />";
|
即使条目是目录。我已经使用 “var_dump” 函数手动检查了该条目,它作为目录返回 true。
任何建议都会有所帮助
试试这个并检查。试一试…
1 2 3 4 5 6 7 8 9 10 11 12
|
$handle = opendir("files/");
while(($entry = readdir($handle)) !== false)
{
if($entry =="." || $entry =="..")
{
continue;
}
elseif(is_dir("files/".$entry))
{
echo"Directory:$entry<br />";
}
}
|
- 作品。但我仍在试图弄清楚为什么它需要这样的逻辑。
-
Becoz is_dir 是相对的。 :) 您在 files/ 中有目录。 :) 简单的逻辑。
试试:
readdir() 只是返回文件名。因此,您的代码在当前目录而不是子目录中查找文件。
-
但是手册指出,如果文件名是一个目录(通过 is_dir),它应该返回 true。
-
问题是它的文件名错误。您关心的文件名是 files/foo,但 $entry 只包含 foo。
-
我想我现在明白了。这是因为我使用的是 opendir 函数,它返回句柄而不是文件名。
$entry 是相对的… is_dir 需要一个绝对路径。
-
你的答案有效。但是在手册中没有提到它需要绝对路径。它只声明,”文件的路径。如果文件名是相对文件名,它将相对于当前工作目录进行检查。”我像这样手动检查值:var_dump(is_dir($entry)),它返回 true。
-
chdir() 函数将更改 PHP 中的当前目录。否则它不会被 readdir 改变。
您的问题是,在 elseif(is_dir($entry)) { 中,entry 等于”file.txt”或”somedirectory”之类的字符串,它根本不是指向文件的路径。它需要是”files/file.txt”。
试试这个:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
$dir ="files/";
$handle = opendir($dir);
while(($entry = readdir($handle)) !== false)
{
if($entry =="." || $entry =="..")
{
continue;
}
if(is_dir($dir.$entry))
{
echo"Directory:$entry<br />";
}
}
|
尝试使用 DirectoryIterator:
1 2 3 4 5 6 7 8 9 10 11
|
$iterator = new //DirectoryIterator (realpath(‘files/’));
foreach($iterator as $file){
if($file->isDot()) continue;
if($file->isDir()) printf(‘Directory: %s <br/>’, $file->getRealPath());
} |
这只会探测任何目录条目的基本名称:
opendir() 结果列表将与您提供的阅读目录相关。所以你需要使用:
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/php/268438.html