php readdir和is_dir

时间:2013-02-24 00:46:33

标签: php directory

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

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。

任何建议都会有所帮助

6 个答案:

答案 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 />";
    }
}