Найти конкретный текст в нескольких 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.