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