Поиск текста в файлах с использованием PHP - PullRequest
2 голосов
/ 01 октября 2010

Как искать текст в некоторых файлах, таких как PDF, doc, docs или txt, используя PHP? Я хочу сделать функцию, аналогичную полнотекстового поиска в MySQL, но на этот раз я напрямую ищу файлы, а не базу данных.

Поиск будет выполнять поиск по многим файлам, которые находятся в папке. Любое предложение, советы или решения для этой проблемы?

Я также заметил, что Google также выполняет поиск по файлам.

Ответы [ 3 ]

4 голосов
/ 01 октября 2010

Для поиска в 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]));
        }
    }
}
3 голосов
/ 01 октября 2010

В зависимости от типа файла вы должны преобразовать файл в текст, а затем выполнить поиск по нему, используя, например, file_get_contents() и str_pos().Для преобразования файлов в текст у вас есть - помимо других - следующие инструменты:

  • catdoc для файлов слов
  • xlhtml для файлов Excel
  • ppthtml для файлов PowerPoint
  • unrtf для файлов RTF
  • pdftotext для файлов PDF
1 голос
/ 01 октября 2010

Если вы используете сервер Linux, вы можете использовать

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

, который вызывается из php с помощью exec , что приводит к

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