你好我是一个新手在PHP我正在尝试使用PHP进行搜索功能,但只在网站内没有任何数据库
基本上如果我想搜索字符串即“健康”,它会显示行
<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];
我还没试过它,如果它可以工作,但在我之前,我想问是否有更好的方法来做到这一点? 如果我的文件有太多行,它会不会强调服务器?
答案 0 :(得分:1)
file()
函数将返回一个数组。您应该使用file_get_contents()
,因为它返回一个字符串。
然后,使用regular expressions查找链接中的特定文字。
答案 1 :(得分:1)
你的目标很好,但你所考虑的方法却不是。 file()
函数逐行读取文件,并将其插入到数组中。这假设HTML以人类可读的方式结构良好,但情况并非总是如此。但是,如果您是提供HTML的人,并且确保结构完美定义,那么......在这里您可以获得我们提供给我们但完整的示例(考虑到它&#39; s&# 39;错误的解决问题的方法,但如果你想遵循这种模式,那就没关系了:
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;
}
}
这将返回一个数组,其中包含您引用的所有页面的所有页面,以页面分隔。正如我所说,这不是你想要解决的方式,但它是一种方式。
希望有所帮助
答案 2 :(得分:0)
因为您不想使用任何数据库,并且因为术语数据库非常广泛并且包含您希望在没有数据库的情况下在某个数据库中进行搜索的文件系统。
这没有任何意义。在您的情况下,一个数据库至少是文件系统。如果您可以接受以下事实:您想要搜索数据库(这里是您的html文件),但您不想使用数据库来存储与搜索相关的任何内容(例如某些索引或缓存结果),那么您的建议基本上是它是如何工作的:一种实时的,基于文本的逐行文件搜索。
当然这是非常简陋的,但由于你的约束是“没有数据库”,你已经找到了唯一可行的方法。是的,它会在使用时给您的服务器带来压力,因为实时搜索很昂贵。
否则通常Lucene/Solr用于作业,但它甚至是数据库和服务器。