我有一个跟踪脚本中发生的事件的函数。为了有效地使用我的资源,我决定压缩它生成的数据。但是,我一直收到这个错误:
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);
}
}
因此,每天午夜,当上述任何事件发生时(帐户,运行,队列,系统)都会创建一个新的错误日志,否则每个新事件都会附加到尊重的日志文件中。
我很想保持压缩,但我不能继续犯这些错误,有人可以帮忙吗?提前谢谢。
答案 0 :(得分: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);
这种方法可以为您节省更多处理能力