gzopen为现有的有效文件

时间:2016-03-02 17:32:03

标签: php zlib

我正在尝试使用zLib函数构建日志解析器,并且遇到了问题。这是我的代码:

$filename = '/Users/awallace/AccessLogs/access.log.6.gz';

$handle = gzopen( $filename, 'r');

while ( $buffer = gzgets( $handle, 2048 ) )
{
    if ( strpos($buffer, "Leadbuilder.") !== false )
    {
        print $buffer . "\n";
    }

    gzclose($handle);
}

(我已删除错误检查代码)。当我运行这个时,我收到一个警告:

 Warning: gzgets(): 5 is not a valid stream resource in /Users/awallace/test.php on line 22

如果我在gzopen之后转出句柄,我得到:"资源ID#5"。知道为什么这不起作用吗?

  • PHP v:5.5.29
  • MacOS 10.10.5
  • "文件"的输出命令:
      

    /Users/awallace/AccessLogs/access.log.6.gz:gzip压缩数据,来自   Unix,最后修改时间:2016年2月24日星期三23:35:20

谢谢..

1 个答案:

答案 0 :(得分:2)

关闭循环内的句柄,因此在第二个循环迭代$handle无效。

而是这样做:

$handle = gzopen( $filename, 'r');        
while ( !gzeof($handle) )
{
    $buffer = gzgets( $handle, 2048 );

    if ( strpos($buffer, "Leadbuilder.") !== false )
    {
        print $buffer . "\n";
    }
}
gzclose($handle);