2

我正在测试目录处理的功能。我有一个包含以下内容的折叠/目录:

0 文件夹

假文件夹

my_pictures 文件夹

MVI_3094 mov 文件

img01 JPEG 图片

ETC...

我编写了以下代码来遍历目录并打印出特定的结果

$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。

任何建议都会有所帮助

4

6 回答 6

7

试试这个并检查。只是尝试...

$handle = opendir("files/");
while(($entry = readdir($handle)) !== false)
{
    if($entry == "." || $entry == "..")
    {
        continue;
    }
    elseif(is_dir("files/".$entry))
    {
        echo "Directory:$entry<br />";
    }
}
于 2013-02-24T00:48:13.773 回答
1

$entry 是相对的... is_dir 需要一个绝对路径。

于 2013-02-24T00:49:10.330 回答
1

尝试:

if(is_dir("files/".$entry))

readdir()只是返回文件名。因此,您的代码在当前目录而不是子目录中查找文件。

于 2013-02-24T00:50:46.110 回答
0

这只会探测任何目录条目的基本名称:

 is_dir($entry)

opendir() 结果列表将与您提供的阅读目录相关。所以你需要使用:

 is_dir("files/$entry")
于 2013-02-24T00:50:10.703 回答
0

尝试使用DirectoryIterator

$iterator = new \DirectoryIterator(realpath('files/'));

foreach($iterator as $file){

  if($file->isDot())
    continue;

  if($file->isDir())
    printf('Directory: %s <br/>', $file->getRealPath());

}
于 2013-02-24T00:50:57.953 回答
0

您的问题是 in elseif(is_dir($entry)) {entry等于“file.txt”或“somedirectory”之类的字符串,它根本不是指向文件的路径。它需要是“文件/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 />";
    }
}
于 2013-02-24T00:53:28.167 回答