使用递归就可以了。在我往上摘取的一段递归列目录清单的程序:
function listfile($dir, $i=0)
{
        $handle = opendir($dir);
        while (false!==($filename = readdir($handle)))
        {
                if($filename != "." && $filename != "..")
                {
                        if(!is_dir("$dir/$filename"))
                        {
                                echo str_repeat('|--', $i).$dir."/".$filename."<br>";
                        }
                        else
                        {
                                echo str_repeat('|--', $i).$dir."/".$filename."<br>";
                                $i++;
                                listfile("$dir/$filename", $i);
                                $i--;
                        }
                }
        }
        closedir($handle);
}