Как я сканирую каталог для определенной строки текста и список всех совпадающих файлов с php?Поиск фразы/слова в текстовых файлах с помощью php
Спасибо.
Как я сканирую каталог для определенной строки текста и список всех совпадающих файлов с php?Поиск фразы/слова в текстовых файлах с помощью php
Спасибо.
Я на самом деле написал функцию для этого несколько дней назад ...
Вот базовая функция, которая сканирует каждый файл ...
foreach (glob("<directory>/*.txt") as $search) {
$contents = file_get_contents($search);
if (!strpos($contents, "text")) continue;
$matches[] = $search;
}
Не самый продвинутый способ сделать это, мой функция намного длиннее, но она также использует все функции из моих различных классов, это в основном то, что она делает.
Ну, сначала вы можете получить список интересующих файлов с помощью 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 Search Engine? Самый известный из них - Zend Framework. Лучше всего, что вам не нужно использовать фреймворк для использования библиотеки Lucene (просто включите базовый файл библиотеки - помните, чтобы добавить каталог Zend Libraries в путь include).
Я не использовал его сам и слышал очень неоднозначные отзывы об этом. Единственное, что я мог подумать, это то, что он может быть слишком сложным для небольшого скрипта или проекта.
Подробное описание overview of the Lucene Library приведено в справочнике Zend Framework.
Если файлы большие, то излишнему приходится считывать каждый файл в память, а затем искать его коннекты.
Если разрешение на чтение через каталог, вы можете выяснить, файл, в котором игла находится комбинируя exec с egrep:
php > exec("egrep -rl 'string of what I want to find' full-or-relative-directory", $output);
php > print_r($output);
Array
(
[0] => full-or-relative-directory/foo/bar.xml
)
php > $contents = file_get_contents($output[0]);
$directory = "/var/www/application/store/"; //define the path
$files1 = scandir($directory); //scandir will scan the directory
$c = count($files1); //this will count all the files in the directory
print $c;
несколько расширений можно сделать проще с: 'Глоб ('*. {ext1, ext2, ext3}', GLOB_BRACE) ' –