PHP:圧縮ファイルの操作(ファイルの読み書き):zlib、gzip
PHP (55 items)
2005年01月28日
例えばログファイル等、
サーバーのディスク上にファイルを置いて処理するような場合、
ファイルサイズが大きくなれば、それだけディスク容量が取られる。
こういう場合は、そのログファイルを圧縮して保存し、
その圧縮ファイルに対して、読みこみ・書きこみを行う事で、
ディスク容量が軽減できる。
PHPでこれを実現するには、zlib圧縮関数を使用する。
サーバーのディスク上にファイルを置いて処理するような場合、
ファイルサイズが大きくなれば、それだけディスク容量が取られる。
こういう場合は、そのログファイルを圧縮して保存し、
その圧縮ファイルに対して、読みこみ・書きこみを行う事で、
ディスク容量が軽減できる。
PHPでこれを実現するには、zlib圧縮関数を使用する。
CXXXV. zlib圧縮関数
このモジュールによりgzip (.gz)で圧縮されたファイルを読み書きする ことが可能となります。
この際、圧縮形式はgzip形式。
UNIX系のOSで使われる形式である。
以下の例は、”log.txt”を”log.txt.gz”と圧縮して処理したもの。
この場合、圧縮ファイル”log.txt.gz”の中に、
テキストファイル”log.txt”が存在する形となる。
(1)
圧縮ファイルを読みこむ際は、EOFになるまでループして読みこむ。
gzread関数の第2引数は、解凍された文字列を読みこむサイズ。
通常のファイルを読みこむfread関数であれば、
と、filesize関数でファイルのサイズを取得し、それを引数に渡せば良いが、
上記圧縮ファイルの例では、ファイルサイズは圧縮されたサイズなので、
fread関数のように使用すべきではない。
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関数のように使用すべきではない。
前の記事 次の記事