【问题标题】:PHP Search database and directory structure and match togetherPHP 搜索数据库和目录结构并匹配在一起
【发布时间】:2013-11-27 22:41:26
【问题描述】:

我有一个带有 page_name 列的表,其中列出了我的所有页面,例如:

directory1/test1.php
directory2/test_page.php
directory3/sub_dir/page5.php

等等..所以它列出了页面名称和它所在的目录

如何将此列表与我的目录结构匹配并显示所有未在我的数据库表中列出的页面?

所以我想像这样显示文件和目录:

dir1/file1.php 目录1/文件2.php dir2/file1.php dir3/file1.phpdir3/file2.php

但仅在它们不在数据库中时才显示。例如,dir1/file.php 在表中它不会显示在列表中

【问题讨论】:

  • 请在您的问题中详细说明“显示所有页面”,因为这听起来像是隐藏其他页面访问或仅显示它们的路径!
  • 查看我的编辑了解更多信息

标签: php mysql


【解决方案1】:

您可以使用 PHP 的内置目录函数获取特定目录的文件名: http://www.php.net/manual/en/ref.dir.php

对于每个文件,您会检查它是否存在于您的数据库中,如果不存在,则打印该文件。

【讨论】:

    【解决方案2】:

    首先你可能需要'递归目录遍历',我在我找到的代码下面发布,

    $rootpath = '.';
    $fileinfos = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($rootpath)
    );
    foreach($fileinfos as $pathname => $fileinfo) {
        if (!$fileinfo->isFile()) continue;
        var_dump($pathname);
    }
    

    显示如下:

    string(11) ".\.htaccess"
    string(33) ".\dom\xml-attacks\attacks-xml.php"
    string(38) ".\dom\xml-attacks\billion-laughs-2.xml"
    string(36) ".\dom\xml-attacks\billion-laughs.xml"
    

    等等,

    现在大致可以使用了,

    $sql='SELECT * FROM your_table WHERE $pathname NOT IN ('your_table')';
    

    就在你的任务下方。

    【讨论】:

    • 这似乎有效,我该如何添加例外。那么如何排除目录呢?
    • 如何排除目录?
    • $total_rows 变量从何而来?我是否同时使用上述代码的两个部分?
    • 首先不要只是复制代码,它是原始形式!其次,对于 $total_rows,您可以使用 COUNT(*)。
    • 我只是在问,你还没有很好地解释你答案的第二部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多