Web Artisan Blog - ウェブ アルチザン ブログ

PHP:圧縮ファイルの操作(ファイルの読み書き):zlib、gzip

PHP (55 items)

2005年01月28日

例えばログファイル等、
サーバーのディスク上にファイルを置いて処理するような場合、
ファイルサイズが大きくなれば、それだけディスク容量が取られる。
こういう場合は、そのログファイルを圧縮して保存し、
その圧縮ファイルに対して、読みこみ・書きこみを行う事で、
ディスク容量が軽減できる。

PHPでこれを実現するには、zlib圧縮関数を使用する。

CXXXV. zlib圧縮関数
このモジュールによりgzip (.gz)で圧縮されたファイルを読み書きする ことが可能となります。 

この際、圧縮形式はgzip形式
UNIX系のOSで使われる形式である。

以下の例は、”log.txt”を”log.txt.gz”と圧縮して処理したもの。
この場合、圧縮ファイル”log.txt.gz”の中に、
テキストファイル”log.txt”が存在する形となる。

■ファイルへ書きこみ
//文字列設定
$text = 'TEST 20050128';

//圧縮ファイルのオープン
$fp = gzopen('log.txt.gz','w9');

//圧縮ファイルに書きこみ
gzwrite($fp,$text);

//圧縮ファイルのクローズ
gzclose($fp);



■ファイルの読みこみ
//圧縮ファイルのオープン
$fp = gzopen('log.txt.gz','r');

//圧縮ファイルの読みこみ・・(1)
do {
  $data = gzread($fp, 10000);
  if (strlen($data) == 0) {
    break;
  }
  $text .= $data;
} while(true);

//圧縮ファイルのクローズ
gzclose($fp);


(1)
圧縮ファイルを読みこむ際は、EOFになるまでループして読みこむ。
gzread関数の第2引数は、解凍された文字列を読みこむサイズ。
通常のファイルを読みこむfread関数であれば、

fread($fp,filesize('log.txt'));


と、filesize関数でファイルのサイズを取得し、それを引数に渡せば良いが、
上記圧縮ファイルの例では、ファイルサイズは圧縮されたサイズなので、
fread関数のように使用すべきではない。

前の記事 次の記事

Comments

コメントは、まだ書かれていません

Add Comments

Trackback

トラックバックはありません

Trackback URL

http://www.res-system.com/weblog/action.php?action=plugin&name=TrackBack&tb_id=418