Поиск фразы/слова в текстовых файлах с php

Как я просканировал бы каталог для определенной строки текста и перечислил бы все файлы соответствия с php?

Спасибо.

5
задан usertest 17 February 2011 в 22:54
поделиться

5 ответов

Я действительно написал функцию для этого несколько дней назад ...

Вот базовая функция, которая сканирует каждый файл ...

foreach (glob("<directory>/*.txt") as $search) {
    $contents = file_get_contents($search);
    if (!strpos($contents, "text")) continue;
    $matches[] = $search;
}

Не самый продвинутый способ сделать это, моя функция намного длиннее, но она также использует все функции из моих различных других классов, хотя в основном это то, что он делает.

7
ответ дан 14 December 2019 в 01:06
поделиться

Альтернативой является чтение файлы php, поместите содержимое в массивы и используйте что-то вроде preg_grep .

Если количество файлов потенциально очень велико, вы можете использовать команду UNIX grep вместе с командой php exec .

Я бы лично выбрал второе решение.

1
ответ дан 14 December 2019 в 01:06
поделиться

Ну, сначала вы можете захотеть получить список интересующих файлов с помощью glob (если вам нужно несколько расширений, просто объедините полученные массивы или используйте this ). Затем прокрутите результат, откройте файлы с помощью file_get_contents и проверьте строку с помощью strpos .

0
ответ дан 14 December 2019 в 01:06
поделиться

Вот тривиальный пример того, как это можно сделать строго в php ...

  1. Получить список всех файлов / каталогов в каталоге .

  2. Проверить, что каждое имя файла / каталога является файлом

  3. Получить содержимое файла

  4. Используйте функцию поиска по строке для поиска совпадений с искомой строкой. Если совпадение существует, выведите имя файла

Meep

<?php
$path = 'c:\\some\\cool\\directory';
$findThisString = 'Cool Cheese';

$dir = dir($path);

// Get next file/dir name in directory
while (false !== ($file = $dir->read()))
{   
    if ($file != '.' && $file != '..')
    {
        // Is this entry a file or directory?
        if (is_file($path . '/' . $file))
        {
            // Its a file, yay! Lets get the file's contents
            $data = file_get_contents($path . '/' . $file);

            // Is the str in the data (case-insensitive search)
            if (stripos($data, $findThisString) !== false)
            {
                // sw00t! we have a match
            echo 'match found in ' . $file . "<br>\n";
            }
        }
    }
}

$dir->close();

?>
1
ответ дан 14 December 2019 в 01:06
поделиться

Я не буду помещать здесь свой рекомендуемый ответ, потому что 5 человек уже опубликовали отличные ответы о том, как решить эту проблему, но порекомендуют альтернативу.

Рассматривали ли вы использование PHP-реализации поисковой системы Lucene? Самый известный из них - из Zend Framework . Лучше всего то, что вам не нужно использовать фреймворк для использования библиотеки Lucene (просто включите базовый файл библиотеки - не забудьте добавить каталог Zend Libraries в путь включения).

Я сам им не пользовался и слышал очень неоднозначные отзывы о нем. Единственное, о чем я мог подумать, это то, что это может быть слишком сложно для небольшого сценария или проекта.

Великолепный подробный обзор библиотеки Lucene можно найти в справочном руководстве по Zend Framework.

0
ответ дан 14 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: