如何在PHP中从dir显示文件夹和子文件夹

时间:2010-11-17 13:19:33

标签: php directory

我正在尝试获取包含文件夹和子文件夹的列表我有以下内容允许我获取文件夹和子文件夹,但我需要将其整理出来,例如下面我一直在尝试,但我不知道如何我会绕开。

Root/
Root/Images
Root/Images/UserImages

Root/Text/
Root/Text/User1/
Root/Text/User1/Folder2

但是在这个方面它的显示如此

Root/css/
tree/css/
js/
images/

PHP代码:

    function ListFolder($path)
{

    $dir_handle = @opendir($path) or die("Unable to open $path");

    //Leave only the lastest folder name
    $dirname = end(explode("/", $path));

    //display the target folder.
    echo ("$dirname/");
    while (false !== ($file = readdir($dir_handle)))
    {
        if($file!="." && $file!="..")
        {
            if (is_dir($path."/".$file))
            {
                //Display a list of sub folders.
                ListFolder($path."/".$file);
                echo "<br>";
            }
        }
    }


    //closing the directory
    closedir($dir_handle);
}

    ListFolder("../");

谢谢

3 个答案:

答案 0 :(得分:3)

直接在数组中收集目录名而不是echo。在数组上使用sort,然后使用foreach - 循环打印列表。

因此,您可以使用echo ("$dirname/");代替$dirnames[] = $dirname;(将$ dirnames全局化并在第一次调用“ListFolder”之前对其进行初始化)。然后在递归运行“ListFolder”之后,你将执行sort($dirnames);然后输出这样的东西:

foreach ($dirnames as $dirname)
{
  echo $dirname . '<br />';
}

答案 1 :(得分:1)

你可以使用DirectoryIterator或者更好的来自php SPL的RecursiveDirectoryIterator来获得你想要的东西。

这是一个如何使用它的简单示例:

    $dir = '/path/to/directory';
    $result = array();

    if (is_dir($dir)) {
            $iterator = new RecursiveDirectoryIterator($dir);
            foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $file) {                    
                if (!$file->isFile()) {
                    $result[] = 'path: ' . $file->getPath(). ',  filename: ' . $file->getFilename();
                }
            }

    }

这应该可以解决问题。祝你好运;)

答案 2 :(得分:1)

使用此代码,您将获得包含子目录的列表(但设置您的foldername)

<?php
$path = realpath('yourfolder/examplefolder');
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $filename)
{
        echo "$filename\n";
}
?>