使用PHP搜索文本文件并显示结果

时间:2014-06-29 02:38:49

标签: php arrays file search

我有一个文件夹(blogfiles/posts),其中包含各种文本文件,编号为(1.txt,2.txt,3.txt ...),每个文件都有一个博客帖子(我没有学习SQL了)。我正在尝试为它创建一个搜索引擎,它将从文本框中获取查询(使用此部分完成),然后在文件中搜索查询中的每个单词,并返回结果(可能按照数量的顺序)这个词出现的次数)。

每个文本文件如下所示:

  

第1行的标题

     

在第2行发布的日期(以月份日期,年份形式)

     

发布正文以搜索第3行及以上

我目前有这段代码:

<?php
    $q = $_GET["q"];
$qArray = explode(" ", $q);

//preparing files
$post_directory = "blogfiles/posts/";
$files = scandir($post_directory, 1);
$post_count = (count($files)) - 2;
$files = array_pop($files); // there are 2 server files I want to ignore (#1)
    $files = array_pop($files); // there are 2 server files I want to ignore (#2)

foreach ($files as $file) {
    //getting title
        $post_path = $post_directory . $file;
    $post_filecontents = file($post_path);
    $post_title = $post_filecontents[0];
    echo "<tr><td><a href=\"blog?p=" . $file . "\">" . $post_title . "</a></td></tr>";
}

if ($post_count > 2) {
$postPlural = "s";
}

echo "<tr><td>" . $post_count . " post" . $postPlural . ".";
?>

我现在为格式化道歉,我试图把它分开来排除故障。 任何有助于实现这一目标的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

搜索文件的方法有很多。

  1. 使用preg_match_all函数匹配每个文件的模式。

  2. 使用system()函数运行外部命令,如grep(仅在* nix下可用)。

  3. 使用strpos函数(不推荐使用,因为性能低且缺乏对模式的支持)。

  4. 如果您将面临大流量,最好使用预构建索引来加速搜索。例如,将帖子分成标记(单词)并添加位置信息以及单词,当用户搜索某些单词时,您可以先将单词拆分,然后查找索引。描述这种方法比实现它更简单。您可能需要现有的全文搜索引擎,如Apache Lucene。