2012-03-19 13 views
1

私はスクリプトを通して起こる出来事を記録する機能を持っています。私のリソースを効果的に使うために、私は生成するデータを圧縮することに決めました。しかし、私はこのエラーを取得しておいてください。PHP gzuncompressがファイルの読み取りと書き込みのエラーを伴う

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

ので、日常、真夜中に、新しいエラーログは、作成されますキュー、システム)、それ以外の場合は新しいイベントが敬礼ログファイルに追加されます。

私は圧縮を保つのが大好きですが、私はこれらのエラーが発生し続けることはできません。だれでも助けてくれますか?前もって感謝します。

+1

'file_put_contents'はここで多くの問題を軽減します。 – Jon

+0

私はこれを 'file_get_contents'で試していますが、これまでのところ問題ありません。 –

答えて

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

このアプローチは、より多くの処理能力を節約します

+0

あなたはそうです、これは最高の選択ですが、私のcronスポットはすべて満杯です。これを私のcronの別のものの最後に貼り付けてください。 –

関連する問題