Как я просканировал бы каталог для определенной строки текста и перечислил бы все файлы соответствия с php?
Спасибо.
Я действительно написал функцию для этого несколько дней назад ...
Вот базовая функция, которая сканирует каждый файл ...
foreach (glob("<directory>/*.txt") as $search) {
$contents = file_get_contents($search);
if (!strpos($contents, "text")) continue;
$matches[] = $search;
}
Не самый продвинутый способ сделать это, моя функция намного длиннее, но она также использует все функции из моих различных других классов, хотя в основном это то, что он делает.
Альтернативой является чтение файлы php, поместите содержимое в массивы и используйте что-то вроде preg_grep .
Если количество файлов потенциально очень велико, вы можете использовать команду UNIX grep вместе с командой php exec .
Я бы лично выбрал второе решение.
Ну, сначала вы можете захотеть получить список интересующих файлов с помощью glob (если вам нужно несколько расширений, просто объедините полученные массивы или используйте this ). Затем прокрутите результат, откройте файлы с помощью file_get_contents и проверьте строку с помощью strpos .
Вот тривиальный пример того, как это можно сделать строго в php ...
Получить список всех файлов / каталогов в каталоге .
Проверить, что каждое имя файла / каталога является файлом
Получить содержимое файла
Используйте функцию поиска по строке для поиска совпадений с искомой строкой. Если совпадение существует, выведите имя файла
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();
?>
Я не буду помещать здесь свой рекомендуемый ответ, потому что 5 человек уже опубликовали отличные ответы о том, как решить эту проблему, но порекомендуют альтернативу.
Рассматривали ли вы использование PHP-реализации поисковой системы Lucene? Самый известный из них - из Zend Framework . Лучше всего то, что вам не нужно использовать фреймворк для использования библиотеки Lucene (просто включите базовый файл библиотеки - не забудьте добавить каталог Zend Libraries в путь включения).
Я сам им не пользовался и слышал очень неоднозначные отзывы о нем. Единственное, о чем я мог подумать, это то, что это может быть слишком сложно для небольшого сценария или проекта.
Великолепный подробный обзор библиотеки Lucene можно найти в справочном руководстве по Zend Framework.