我正在测试目录处理的功能。我有一个折叠/目录,其中包含以下内容:
0文件夹
false文件夹
my_pictures文件夹
MVI_3094 mov file
img01 jpeg image
等...
我编写了以下代码来遍历目录并打印出特定的resutls
$handle = opendir("files/");
while(($entry = readdir($handle)) !== false)
{
if($entry == "." || $entry == "..")
{
continue;
}
if(is_dir($entry))
{
echo "Directory:$entry<br />";
}
}
我唯一的问题是第二个“if”语句不输出
的结果echo "Directory:$entry<br />";
即使条目是目录。我已使用“var_dump”函数手动检查了该条目,并将其作为目录返回true。
任何建议都会有所帮助
答案 0 :(得分:7)
试试这个并检查。试一试......
$handle = opendir("files/");
while(($entry = readdir($handle)) !== false)
{
if($entry == "." || $entry == "..")
{
continue;
}
elseif(is_dir("files/".$entry))
{
echo "Directory:$entry<br />";
}
}
答案 1 :(得分:1)
$ entry是相对的...... is_dir需要绝对路径。
答案 2 :(得分:1)
尝试:
if(is_dir("files/".$entry))
readdir()
只是返回文件名。因此,您的代码正在查找当前目录中的文件而不是子目录。
答案 3 :(得分:0)
这只会探测任何目录条目的基本名称:
is_dir($entry)
opendir()结果列表将相对于您为阅读提供的目录。所以你需要使用:
is_dir("files/$entry")
答案 4 :(得分:0)
尝试使用DirectoryIterator
:
$iterator = new \DirectoryIterator(realpath('files/'));
foreach($iterator as $file){
if($file->isDot())
continue;
if($file->isDir())
printf('Directory: %s <br/>', $file->getRealPath());
}
答案 5 :(得分:0)
你的问题是在elseif(is_dir($entry)) {
中,entry
等于某些字符串,如“file.txt”或“somedirectory”,它根本不是指向文件的路径。它必须是“files / file.txt”。
试试这个:
$dir = "files/";
$handle = opendir($dir);
while(($entry = readdir($handle)) !== false)
{
if($entry == "." || $entry == "..")
{
continue;
}
if(is_dir($dir.$entry))
{
echo "Directory:$entry<br />";
}
}