3

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

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

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

4

4 回答 4

4

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

一个搜索 PDF 的示例(从我的一个脚本中复制(它是一个片段,不是整个代码,但它应该让您有所了解),我在其中提取关键字并将匹配项存储在 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]));
        }
    }
}
于 2010-10-01T11:38:49.977 回答
3

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

  • catdoc对于word文件
  • xlhtml对于 excel 文件
  • ppthtml用于PowerPoint文件
  • unrtf用于 RTF 文件
  • pdftotext对于 pdf 文件
于 2010-10-01T11:45:03.137 回答
1

如果您在 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);
于 2010-10-01T11:36:29.473 回答
0

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

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

我在堆栈上找到基本答案。

于 2021-06-15T18:46:20.593 回答