PHP在txt文件中搜索并回显整行

2020/12/01 03:21 · php ·  · 0评论

使用php,我正在尝试创建一个脚本,该脚本将在文本文件中搜索并获取整行并将其回显。

我有一个名为“ numorder.txt”的文本文件(.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!==运算符一起使用。

使用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

它输出:

富扎


更新:

如果未找到文本,则显示文本,请使用类似以下内容的方法:

<?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变量来查找是否找到匹配项。

 <?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); 
         }
       ?>

看起来您最好还是进行系统设计,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()可能会更好

本文地址:http://php.askforanswer.com/phpzaitxtwenjianzhongsousuobinghuixianzhengxing.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!