你好我是一个新手在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];
我还没有尝试过,如果它会工作,但在我做之前,我想问是否有更好的方法来做到这一点?如果我的文件有太多行,它会给服务器带来压力吗?
file()
函数将返回一个数组。您应该使用file_get_contents()
,因为它返回一个字符串。
然后,使用正则表达式查找链接中的特定文本
你的目标是好的,但你正在考虑的方法不是。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;
}
}
这将返回一个数组,其中包含您所引用的所有页面以及您所查找的单词的所有出现情况,以页面分隔。正如我所说,这不是你想要的解决方法,但它是一种方法。
希望有帮助
由于您不想使用任何数据库,并且由于数据库这个术语非常广泛并且包含文件系统,因此您希望在没有数据库的情况下在某些数据库中进行搜索。
这没有意义。在您的示例中,至少有一个数据库是文件系统。如果你可以接受这样一个事实,你想搜索数据库(这里是你的html文件),但你不想使用数据库来存储任何与搜索相关的东西(例如一些索引或缓存结果),那么你的建议基本上是如何工作的:一个实时的,基于文本的,逐行文件搜索。
当然这是非常基本的,但你的约束是"没有数据库",你已经找到了唯一可能的方法。是的,它会给你的服务器带来压力,因为实时搜索是昂贵的。
通常情况下,Lucene/Solr用于作业,但这是一个数据库和服务器。