【问题标题】:PHP script to automatically create file structure representation [duplicate]PHP脚本自动创建文件结构表示[重复]
【发布时间】:2010-12-13 07:31:59
【问题描述】:

可能重复:
PHP - Iterate through folders and display HTML contents

使用 PHP,我正在尝试创建一个脚本,该脚本将导航到网站的根目录,并从那里使用 scandir()glob()(这些是我学到的唯一目录扫描功能) ,我会使用递归的方法来浏览根目录中的所有项目,然后在遇到测试为目录的条目时通过is_dir($fileName)重新调用自己。

这是我遇到问题的地方 - 当我到达一个目录条目时,它会正确地将 if 语句导航到目录命令,但是在调用自身时,我似乎无法获得glob() 目录正确,因为每次我调用它时,页面都会停止加载更多内容。我试图从扫描目录的基于 URL 的相对性质中弄清楚我将如何引用它。我设置了一个变量$ROOT_DIR,它是相对于php页面所在目录的根目录(在本例中为$ROOT_DIR="../../"),然后逻辑上我会调用scanAllFiles [my站点地图方法] 与 $ROOT_DIR 。 $fileName,这是找到的目录的字符串,在从字符串中删除前导 "../../" 之后。试过之后还是不行。

我应该使用不同的目录遍历方法来执行此操作,还是我错误地格式化了方法调用?

【问题讨论】:

  • 如何区分站点页面和类/配置/功能页面?
  • 我对区分它们完全不感兴趣 - 我希望它们包含在最终列表中。
  • 您确定要抓取文件系统而不是网站吗?您可能会暴露本应隐藏的页面,包括不应出现在站点地图中的管理页面。
  • 一个代码清单会大大增加这个问题的价值——可能还有答案。

标签: php directory traversal


【解决方案1】:

大多数人只是使用 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
    }
?>

【讨论】:

    猜你喜欢
    • 2012-07-12
    • 2023-03-04
    • 1970-01-01
    • 2012-10-04
    • 2021-08-29
    • 1970-01-01
    • 2020-02-05
    • 2014-06-21
    • 2023-03-05
    相关资源
    最近更新 更多