PHP для поиска в txt-файле и эхо всей строки

Используя php, я пытаюсь создать скрипт, который будет искать в текстовом файле и захватить всю эту строку и повторить ее.

У меня есть текстовый файл (.txt) под названием «numorder.txt», и в этом текстовом файле имеется несколько строк данных, причем новые строки появляются каждые 5 минут (с использованием задания cron). Данные выглядят примерно так:

2 aullah1 7 name 12 username 

Как мне приступить к созданию php-скрипта, который будет искать данные «aullah1», а затем захватить всю строку и повторить ее? (После эхо, он должен отображать «2 aullah1» (без кавычек).

Если я не объясню ничего ясно и / или вы хотите, чтобы я объяснил более подробно, прокомментируйте.

И пример PHP, будут показаны несколько совпадающих строк:

 <?php $file = 'somefile.txt'; $searchfor = 'name'; // the following line prevents the browser from parsing this as HTML. header('Content-Type: text/plain'); // get the file contents, assuming the file to be readable (and exist) $contents = file_get_contents($file); // escape special characters in the query $pattern = preg_quote($searchfor, '/'); // finalise the regular expression, matching the whole line $pattern = "/^.*$pattern.*\$/m"; // search, and store all matching occurences in $matches if(preg_match_all($pattern, $contents, $matches)){ echo "Found matches:\n"; echo implode("\n", $matches[0]); } else{ echo "No matches found"; } 

Делай это так. Этот подход позволяет вам искать файл любого размера (большой размер не приведет к сбою сценария) и вернет ВСЕ строки, соответствующие нужной строке.

 <?php $searchthis = "mystring"; $matches = array(); $handle = @fopen("path/to/inputfile.txt", "r"); if ($handle) { while (!feof($handle)) { $buffer = fgets($handle); if(strpos($buffer, $searchthis) !== FALSE) $matches[] = $buffer; } fclose($handle); } //show results: print_r($matches); ?> 

Обратите внимание, как strpos используется с !== operator.

Использование file() и strpos() :

 <?php // What to look for $search = 'foo'; // Read from file $lines = file('file.txt'); foreach($lines as $line) { // Check if the line contains the string we're looking for, and print if it does if(strpos($line, $search) !== false) echo $line; } 

При тестировании в этом файле:

foozah
barzah
abczah

Он выводит:

foozah


Обновить:
Чтобы показать текст, если текст не найден, используйте что-то вроде этого:

 <?php $search = 'foo'; $lines = file('file.txt'); // Store true when the text is found $found = false; foreach($lines as $line) { if(strpos($line, $search) !== false) { $found = true; echo $line; } } // If the text was not found, show a message if(!$found) { echo 'No match found'; } 

Здесь я использую переменную $found чтобы узнать, найдено ли совпадение.

похоже, что вам лучше систематизировать system("grep \"$QUERY\"") так как этот скрипт не будет особенно высокой производительности в любом случае. В противном случае http://php.net/manual/en/function.file.php показывает, как перебирать строки, и вы можете использовать http://php.net/manual/en/function.strstr.php для поиска совпадений.

в одну сторону…

 $needle = "blah"; $content = file_get_contents('file.txt'); preg_match('~^(.*'.$needle.'.*)$~',$content,$line); echo $line[1]; 

хотя, вероятно, было бы лучше прочитать его по строкам с помощью fopen () и fread () и использовать strpos ()

  <?php // script.php $searchfor = $_GET['keyword']; $file = 'users.txt'; $contents = file_get_contents($file); $pattern = preg_quote($searchfor, '/'); $pattern = "/^.*$pattern.*\$/m"; if(preg_match_all($pattern, $contents, $matches)){ echo "Found matches:<br />"; echo implode("<br />", $matches[0]); } else{ echo "No matches found"; fclose ($file); } ?>