【问题标题】:I want to take a syslog file 3 by 3 lines我想获取一个 syslog 文件 3 x 3 行
【发布时间】:2016-04-12 21:13:47
【问题描述】:

我只想用fopen() 打开一个rsyslog 文件,将前3 行设置为最后3 行的变量。然后取其他 3 行等。

 $path_file = variable_get('$path');
 $file = fopen($path_file, 'r');
 for($i=0;$i<3;$i++) {
   $line = fgets($file);
   $line = variable_set($line);
 }
 fclose($file);

【问题讨论】:

  • 我发布了一些非常错误的代码!
  • 你有什么问题。你有什么错误吗?要不然是啥 ?请澄清你的问题。
  • 我想取前 3 行,然后关闭文件。然后当函数再次运行时,取下一个 3 并再次关闭文件。等等
  • 如果要获取接下来的 3 行,则需要保存每次结束的行号,以便知道从哪里开始阅读。

标签: php file drupal rsyslog


【解决方案1】:

改用file()(将所有内容作为数组读取)

试试这个:

$file = file('$path'); 

for($x = 0; $x < count($file); $x = $x + 3) 
{
   if(isset($file[$x]) && isset($file[$x +1]) && isset($file[$x + 2]) 
   {
      //do something with the values. 
   } 
} 


function readFileStartingAtLineNumber($x) 
{
    $file = file('$path'); 

    if(isset($file[$x]) && isset($file[$x +1]) && isset($file[$x + 2]) 
    {
      //do something with the values. 
    } 
}

【讨论】:

  • 我想取前 3 行,然后关闭文件。然后当函数再次运行时,取下一个 3 并再次关闭文件。等等
  • 啊,我以为你希望它拆分 3 类别中的值。然后如果你确定这些行是 $file[0]、$file[1] 和 $file[2]不为空。
  • 以及第二次执行该函数时我将如何读取第 4、5、6 行?
  • 因为也许我在其他时候想要这 3 行而不是所有的值
  • 对不起,我误解你了。这种方法有用吗?
【解决方案2】:
function getLog($path, $numberOfLines, $lastIndex) {
    $file = fopen($path, 'r');
    if (!$file) {
        print 'error opening file';
    }
    else {
        $data   = '';
        $i      = -1;
        while(($line = fgets($file)) !== FALSE) {
            if(++$i < $lastIndex)       continue;
            if($numberOfLines-- == 0)   break;
            $data .= $line;
        }
        fclose($file);
        if ($data === '') {
            print 'EOF reached without getting data';
        }
    }
    return $i;  
}

【讨论】:

  • 作为 lastindex 我必须设置什么?数据?
  • getLog() 到达并返回的最后一个索引
  • fclose() 期望参数 1 是资源,给定数组 fgets() 期望参数 1 是资源,给定数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多