PHP目录列表代码故障

时间:2009-07-04 19:37:15

标签: php directory

我尝试编写一个脚本来列出目录和子目录中的所有文件等等。如果我不包含检查以查看是否有任何文件是目录,则脚本可以正常工作。代码不会产生错误,但它会生成一百行文本,上面写着“目录列表”。而不是我期待的。知道为什么这不起作用吗?

<?php

//define the path as relative
$path = "./";

function listagain($pth)
{
//using the opendir function
$dir_handle = @opendir($pth) or die("Unable to open $pth");

echo "Directory Listing of $pth<br/>";

//running the while loop
while ($file = readdir($dir_handle)) 
{
    //check whether file is directory
    if(is_dir($file))
    {
        //if it is, generate it's list of files
        listagain($file);
    }
    else
    {
        if($file!="." && $file!="..")
        echo "<a href='$file'>$file</a><br/>";
    }
}
//closing the directory
closedir($dir_handle);
}

listagain($path)

?> 

2 个答案:

答案 0 :(得分:4)

第一个enties ...分别引用当前和父目录。所以你得到了无限的递归。

在检查文件类型之前,您应首先检查:

if ($file!="." && $file!="..") {
    if (is_dir($file)) {
        listagain($file);
    } else {
        echo '<a href="'.htmlspecialchars($file).'">'.htmlspecialchars($file).'</a><br/>';
    }
}

答案 1 :(得分:1)

问题是,变量$file仅包含路径的基本名称。因此,您需要使用$pth.$file