<?php
/**********************
一个简单的目录递归函数
第一种实现办法:用dir返回对象
***********************/
function tree($directory) {
if(is_dir($directory)) {
//返回一个 Directory 类实例
$mydir = dir($directory);
echo "<ul>\n";
//从目录句柄中读取条目
while($file = $mydir->read()) {
if(is_dir("$directory/$file") && $file != "." && $file != "..") {
echo "<li><font color=\"#ff00cc\"><b>$file</b></font></li>\n";
//递归读取目录
tree("$directory/$file");
} elseif ($file != "." && $file != "..") {
echo "<li>$file</li>\n";
}

}
echo "</ul>\n";
// 释放目录句柄
$mydir->close();
} else {
echo $directory . '<br>';
}

}
//开始运行

echo "<h2>目录为粉红色</h2><br>\n";
tree("../www.test.com");
<?php 
/***********************
第二种实现办法:用readdir()函数
************************/
function listDir($dir) {
if(is_dir($dir)) {
//打开目录句柄
if ($dh = opendir($dir)) {
//从目录句柄中读取条目
while (($file = readdir($dh)) !== false) {
if(is_dir($dir."/".$file) && $file!="." && $file!="..") {
echo "<b><font color='red'>文件名:</font></b>",$file,"<br><hr>";
listDir($dir."/".$file."/");
}
else {
if($file != "." && $file != "..") {
echo $file."<br>";
}
}
}
closedir($dh);
}
} else {
echo $dir . '<br>';
}
}
//开始运行
listDir("../www.test.com");
?>

以数组形式返回整个文件夹中多重文件

<?php
/**
* Create a Directory Map
*
* Reads the specified directory and builds an array
* representation of it. Sub-folders contained with the
* directory will be mapped as well.
*
* @param string $source_dir Path to source
* @param int $directory_depth Depth of directories to traverse
* (0 = fully recursive, 1 = current dir, etc)
* @param bool $hidden Whether to show hidden files
* @return array
*/
function directory_map($source_dir, $directory_depth = 0, $hidden = FALSE)
{
if ($fp = @opendir($source_dir))
{
$filedata = array();
$new_depth = $directory_depth - 1;
$source_dir = rtrim($source_dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;

while (FALSE !== ($file = readdir($fp)))
{
// Remove '.', '..', and hidden files [optional]
if ($file === '.' OR $file === '..' OR ($hidden === FALSE && $file[0] === '.'))
{
continue;
}

is_dir($source_dir.$file) && $file .= DIRECTORY_SEPARATOR;

if (($directory_depth < 1 OR $new_depth > 0) && is_dir($source_dir.$file))
{
$filedata[$file] = directory_map($source_dir.$file, $new_depth, $hidden);
}
else
{
$filedata[] = $file;
}
}

closedir($fp);
return $filedata;
}

return FALSE;
}

$aa = directory_map('../www.test.com');
var_dump($aa);