使用PHP在文件中搜索文本

时间:2010-10-01 11:31:30

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

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

搜索将搜索位于文件夹中的许多文件。 针对此问题的任何建议,提示或解决方案?

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

4 个答案:

答案 0 :(得分:4)

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

搜索PDF的示例(从我的一个脚本中复制(它是一个片段,而不是整个代码,但它应该让您有所了解),我在其中提取关键字并将匹配存储在PDF结果数组中。) :

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]));
        }
    }
}

答案 1 :(得分:3)

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

  • catdoc用于word文件
  • xlhtml for excel files
  • ppthtml for powerpoint files
  • unrtf用于RTF文件
  • pdftotext了解pdf文件

答案 2 :(得分: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);

答案 3 :(得分:0)

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

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

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