Найти конкретный текст в нескольких txt-файлах в PHP
Я хочу найти определенную текстовую строку в одном или нескольких текстовых файлах в Каталоге, но я не знаю, как. Я гуглил довольно долго, и я ничего не нашел. Поэтому я прошу вас как я могу это исправить?
спасибо заранее.
4 ответов
вы можете получить то, что вам нужно, без использования команды grep. Grep-удобный инструмент, когда вы находитесь в командной строке, но вы можете делать то, что вам нужно, с помощью всего лишь немного PHP-кода.
этот небольшой фрагмент, например, дает вам результаты, похожие на grep:
$path_to_check = '';
$needle = 'match';
foreach(glob($path_to_check . '*.txt') as $filename)
{
foreach(file($filename) as $fli=>$fl)
{
if(strpos($fl, $needle)!==false)
{
echo $filename . ' on line ' . ($fli+1) . ': ' . $fl;
}
}
}
Если вы работаете на хосте Unix, вы можете сделать системный вызов grep
в каталоге:
$search_pattern = "text to find";
$output = array();
$result = exec("/path/to/grep -l " . escapeshellarg($search_pattern) . " /path/to/directory/*", $output);
print_r($output);
// Prints a list of filenames containing the pattern
Если вы находитесь на Linux, вы можете grep вместо использования PHP. Для php конкретно, вы можете перебирать файлы в каталоге, открыть каждый как строку, найти строку и сохраните файл, если строка существует.
просто укажите имя файла, получите содержимое файла и выполните регулярное выражение, соответствующее содержимому файла. См.этой и этой для получения дополнительной информации о моем примере кода ниже:
$fileName = '/path/to/file.txt';
$fileContents = file_get_contents($fileName);
$searchStr = 'I want to find this exact string in the file contents';
if ($fileContents) { // file was retrieved successfully
// do the regex matching
$matchCount = preg_match_all($searchStr, $fileContents, $matches);
if ($matchCount) { // there were matches
// $match[0] will contain the entire string that was matched
// $matches[1..n] will contain the match substrings
}
} else { // file retrieval had problems
}
Примечание: это будет работать независимо от того, находитесь ли вы на коробке linux.