【问题标题】:Search Text In Files Using PHP使用 PHP 在文件中搜索文本
【发布时间】:2011-04-19 19:40:02
【问题描述】:

如何使用 PHP 在 PDF、doc、docs 或 txt 等文件中搜索文本? 我想做与 MySQL 中的全文搜索类似的功能, 但这一次,我是直接搜索文件,而不是数据库。

搜索将在位于文件夹中的许多文件中进行搜索。 对此问题有任何建议、提示或解决方案吗?

我也注意到,谷歌也会搜索文件。

【问题讨论】:

  • 您是否考虑过使用诸如 Lucene、Solr 或 Sphinx 之类的东西?
  • 感谢您提供这些提示。我要研究他们。也许它们对我有用。

标签: php full-text-search text-search


【解决方案1】:

2021 我遇到了这个,发现了一些东西,所以我想我会链接到它......

注意:docx、pdf 和其他文件不是常规文本文件,需要更多脚本和/或不同的库来读取和/或编辑每种不同的类型,除非您可以找到一个多合一的库。这意味着您必须编写出您想要搜索的每种不同文件类型的脚本,尽管包括一个普通的文本文件。如果您不想完全编写脚本,那么您必须安装每个要读取的每种文件类型所需的库。但是您仍然需要编写每个脚本来将它们作为库函数来处理。

我在堆栈上找到了基本答案here

【讨论】:

    【解决方案2】:

    根据文件类型,您应该将文件转换为文本,然后使用file_get_contents()str_pos() 进行搜索。要将文件转换为文本,除了其他工具之外,您还可以使用以下工具:

    • catdoc 用于 word 文件
    • xlhtml 用于 Excel 文件
    • ppthtml 用于PowerPoint文件
    • unrtf 用于 RTF 文件
    • pdftotext 用于 pdf 文件

    【讨论】:

    • 不错的答案,也许有一天我也会派上用场 ;) 我只知道 pdftotext (正如你在我的回答中看到的那样.. ;))+1
    【解决方案3】:

    要搜索 PDF,您需要一个像 pdftotext 这样的程序,它将内容从 pdf 转换为文本。对于 Word 文档,可以使用类似的东西(因为 Word 文件中的所有样式和加密)。

    一个搜索 PDF 的示例(从我的一个脚本复制而来(它是一个 sn-p,不是整个代码,但它应该让您有所了解),我在其中提取关键字并将匹配项存储在 PDF-results-array 中.):

    foreach($keywords as $keyword)
    {
        $keyword = strtolower($keyword);
        $file = ABSOLUTE_PATH_SITE."_uploaded/files/Transcripties/".$pdfFiles[$i];
    
        $content    = addslashes(shell_exec('/usr/bin/pdftotext \''.$file.'\' -'));
        $result     = substr_count(strtolower($content), $keyword);
    
        if($result > 0)
        {
            if(!in_array($pdfFiles[$i], $matchesOnPDF))
            {
                array_push($matchesOnPDF, array(                                                    
                        "matches"   => $result,
                        "type"      => "PDF",
                        "pdfFile"   => $pdfFiles[$i]));
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      如果你在linux服务器下你可以使用

      grep -R "text to be searched for" ./   // location is everything under the actual directory
      

      使用exec从php调用导致

      cmd = 'grep -R "text to be searched for" ./';
      $result = exec(grep);
      print_r(result);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-02
        • 1970-01-01
        • 2023-03-15
        • 2023-04-02
        • 1970-01-01
        • 2013-08-31
        • 2015-02-05
        • 1970-01-01
        相关资源
        最近更新 更多