自动生成文件结构表示的PHP脚本

4

可能是重复问题:
PHP - 遍历文件夹并显示HTML内容

使用PHP,我正在尝试创建一个脚本,它将导航到网站的根目录,然后使用 scandir()glob()(这些是我学习的唯一的目录扫描函数),我将使用递归方法遍历根目录中的所有项目,然后在遇到测试为目录的条目时重新调用自身,通过 is_dir($fileName)

这是我遇到问题的地方——当我遇到一个目录条目时,它会正确地导航到目录命令的if语句,但是在调用自身时,我似乎无法正确获取glob()目录,因为每次调用它时,页面都停止加载更多内容。我试图从基于相对URL的扫描目录的本质中弄清楚如何引用它。我设置了一个变量$ROOT_DIR,它是相对于php页面所在的目录的根目录(在这种情况下,$ROOT_DIR="../../"),然后我认为,逻辑上,我应该使用$ROOT_DIR . $fileName调用scanAllFiles [我的站点地图方法],其中$fileName是找到的目录字符串,在从字符串中删除前导"../../"之后。尝试后,它不起作用。
我应该使用不同的目录遍历方法来完成这个任务,还是我的方法调用格式不正确?

你将如何区分网站页面和类/配置/函数页面? - Russell Dias
我完全不想将它们区分开来 - 我希望它们包含在最终清单中。 - Nightfirecat
你确定要爬取文件系统而不是网站吗?这样做可能会暴露本应隐藏的页面,包括不应该出现在网站地图中的管理员页面。 - bcosca
一份代码清单会极大地提高这个问题的价值,也可能会增加答案。 - zanlok
1个回答

2

大多数人只是使用MySQL手动制作网站地图。

暴露文件并不安全,但你可以添加一些安全性。

<?php
    function files($dir=".") {
        $blacklist = array(str_replace("/","",$_SERVER['SCRIPT_NAME']), 'admin.php', 'users.txt', 'secret.txt');
        $return = array();
        $glob1 = glob($dir."/*");
        for($i=0;$i<=count($glob1)-1;$i++) {
            $item = $glob1[$i];
            $nodir = str_replace($dir, "", $item);
            if(is_dir($item)) {
                $file1 = explode('/', $item);
                $file = $file1[count($file1)-1];
                $merge = array_merge($return, files($item));
                if(!in_array($file, $blacklist) and !empty($nodir)) $return = $merge;
            }
            else {
                $file1 = explode('/', $item);
                $file = $file1[count($file1)-1];
                if(!in_array($file, $blacklist) and !empty($nodir)) $return[] = str_replace("./","",$item);
            }
        }
        return $return;
    }
    // Use like this:
    $files = files(); // Get all files from top folder down, no traling slash  ...
    for($i=0;$i<=count($files)-1;$i++) { // ... Go through them ...
        echo "<li>$files[$i]</li>"; // ... And echo the item
    }
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接