【问题标题】:Search text files and display results with PHP使用 PHP 搜索文本文件并显示结果
【发布时间】:2014-06-29 02:38:49
【问题描述】:

我有一个文件夹 (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 . ".";
?>

我现在为格式道歉,我试图将其分开以进行故障排除。 非常感谢任何帮助以使这项工作正常进行。

【问题讨论】:

  • “我有一个文件夹 (blogfiles/posts),里面有各种文本文件,编号为 (1.txt, 2.txt, 3.txt...),它们每个都有一个博客帖子 (我还没学过 SQL)。”这就是你应该学习 SQL 的原因,因为你想做的事情听起来比学习 SQL 更让人头疼。
  • (旁注)“我还没学过 SQL” - 做。你会为此感谢我的。使用 SQL 进行的维护只是您现在使用的一小部分。
  • 是的,我知道,我只是没有时间专注于它。我在不到一周的时间内学会了 PHP,但我无法轻松理解 SQL 命令。
  • @Fred-ii- 每个人都会这么说。 MySQL 和数据库通常是为这样的任务而设计的。从概念上讲,可以按需搜索.txt 文件。但这需要将 每个 文件加载到内存中,搜索每个文件然后返回结果。这将很快炸毁您的服务器。 MySQL 可以毫不费力地处理这些任务。不要为工作使用错误的工具。了解 DB 如何完成此类工作。
  • @JakeGould +1 我“认为”同样的事情,我的评论是“字里行间”。我只是不想让我的手指抽筋;-)

标签: php arrays file search


【解决方案1】:

有很多方法可以搜索文件。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多