1

您好,我是 php 的新手,我正在尝试使用 php 进行搜索功能,但仅在没有任何数据库的网站内部

基本上,如果我想搜索一个名为“Health”的字符串,它将显示这些行

<a href="foobar.html">The Joys of Health</a>
<a href="foobar2.html">Healthy Diets</a>

如果正确编码会输出我想要的“行”,这个片段是我唯一能找到的东西

$myPage = array("directory.php","pages.php");
$lines = file($myPage[n]);
echo $lines[n]; 

我还没有尝试过它是否会起作用,但在我这样做之前我想问一下是否有更好的方法来做到这一点?如果我的文件有太多行不会给服务器带来压力吗?

4

3 回答 3

1

你的目标很好,但你正在考虑的方法不是。该file()函数逐行读取文件,并将其插入到数组中。这假设 HTML 以人类可读的方式结构良好,但情况并非总是如此。但是,如果您是提供 HTML 的人,并且您确保结构是完美定义的,好的……这里有您提供给我们但完整的示例(考虑到这是解决问题的“错误”方式,但如果你想遵循这种模式,没关系):

function pagesearch($pages, $string) {
    if (!empty($pages) && !empty($string)) {
        $tags = [];

        foreach ($pages as $page) {
            if ($lines = file($page)) {
                foreach ($lines as $line) {
                    if (!empty($line)) {
                        if (mb_strpos($line, $string)) {
                            $tags[$page][] = $line;
                        }
                    }
                }
            }
        }

        return $tags;
    }
}

这将为您返回一个数组,其中包含您引用的所有页面以及您查找的所有单词的出现,按页面分隔。正如我所说,这不是你想要解决这个问题的方式,而是一种方式。

希望有帮助

于 2013-04-10T10:17:07.680 回答
1

file()函数将返回一个数组。您应该使用file_get_contents()它,因为它返回一个字符串。

然后,使用正则表达式在链接中查找特定文本。

于 2013-04-10T09:55:57.030 回答
0

因为您不想使用任何数据库,并且因为术语数据库非常广泛,并且包括您想要在没有数据库的情况下在某些数据库中进行搜索的文件系统。

这是没有意义的。在您的情况下,至少一个数据库是文件系统。如果您可以接受您想要搜索数据库(这里是您的 html 文件)但您不想使用数据库来存储与搜索相关的任何内容(例如某些索引或缓存结果)的事实,那么您的建议基本上就是它是如何工作的:实时的、基于文本的、逐行的文件搜索。

当然这是非常基本的,但由于您的约束是“没有数据库”,您已经找到了唯一可能的方法。是的,它会在使用时给您的服务器带来压力,因为实时搜索很昂贵。

否则通常Lucene/Solr用于该作业,但它甚至是数据库和服务器。

于 2013-04-10T09:52:40.537 回答