PHP для поиска в текстовом файле и повторения всей строки


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

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

2 aullah1
7 name
12 username

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

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

Author: Toby Allen, 2010-09-10

6 answers

И пример 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";
}
 64
Author: Lekensteyn, 2015-12-10 11:30:34

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

<?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 используется с оператором !==.

 44
Author: shamittomar, 2010-09-10 16:11:13

Использование 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;
}

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

Фуза
барза
абча

Выводит:

Фуза


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

<?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, чтобы узнать, было ли найдено совпадение.

 15
Author: Frxstrem, 2010-09-10 19:25:10

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

 4
Author: Novikov, 2010-09-10 15:58:13

Один из способов...

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

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

 2
Author: Crayon Violent, 2010-09-10 16:07:14
 <?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); 
         }
       ?>
 2
Author: , 2015-11-16 04:23:55