【问题标题】:PHP gzuncompress with file read and write errorsPHP gzuncompress 与文件读写错误
【发布时间】:2012-03-19 10:05:55
【问题描述】:

我有一个函数可以跟踪整个脚本中发生的事件。为了有效地使用我的资源,我决定压缩它生成的数据。但是,我不断收到此错误:

Unknown error type: [2] gzuncompress() [function.gzuncompress]: data error

函数如下:

function eventlog($type, $message){
    // Types: account,run,queue,system
    // Set up file name/location
    $eventfile = '/myprivatedirectory/'.date('Ymd').$type.'.log';

    if(file_exists($eventfile)){
        while(!is_writable($eventfile)){clearstatcache();}

        $fh_log = fopen($eventfile,'r+');
        flock($fh_log, LOCK_EX);
        $logcontents = gzuncompress(fread($fh_log,filesize($eventfile)));

        rewind($fh_log);
        ftruncate($fh_log, 0);

        $logcompressed = gzcompress($logcontents.$message."\n");
        fwrite($fh_log,$logcompressed);
        flock($fh_log, LOCK_UN);
        fclose($fh_log);
    } else {
        $fh_log = fopen($eventfile,'w');
        flock($fh_log, LOCK_EX);
        $logcompressed = gzcompress($message."\n");
        fwrite($fh_log,$logcompressed);
        flock($fh_log, LOCK_UN);
        fclose($fh_log);
    }
}

因此,每天午夜,当发生上述任何事件(帐户、运行、队列、系统)时,都会创建一个新的错误日志,否则每个新事件都会附加到相应的日志文件中。

我很想继续压缩,但我不能一直有这些错误,有人可以帮忙吗?提前致谢。

【问题讨论】:

  • file_put_contents 会为您省去很多麻烦。
  • 我正在尝试使用file_get_contents,到目前为止没有问题。

标签: php file-io event-log compression


【解决方案1】:

我认为实现都是错误的,我不建议您使用 gzcompress($message."\n");每一条消息...

我认为你应该做的是在一天结束时你可以压缩整个日志文件,这样效率更高

使用保存您的信息

  file_put_contents

在一天结束时

$eventfile = '/myprivatedirectory/'.date('Ymd').$type.'.log';
$eventfileCompressed = '/myprivatedirectory/'.date('Ymd').$type.'.gz';
$gz = gzopen($eventfileCompressed ,"w9");
gzwrite($gz, file_get_contents($eventfile));
gzclose($gz);

读取文件

$zd = gzopen($eventfileCompressed,"r");
$zr = gzread($zd,$fileSize);
gzclose($zd);

这种方法将为您节省更多的处理能力

【讨论】:

  • 你说得对,这是最好的选择,但是,我所有的 cron 点都已满,我只需要将它附加到我的另一个 cron 的末尾。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多