- 2008/01/08
- PHP
HTTP/Request.php を使ってぬるぬると色々なサイトのヘッダーを覗いてファイルをダウンロードするスクリプトを書いていたら、ダウンロードしたのは良いけど正常に開けない、壊れたファイルになってしまう事があった。
ヘッダを見てみると content-encoding が gzip になっていました。Webサーバから送信するときに圧縮してやるアレです。なので、ダウンロードしたファイルが gzip だった場合に解凍する方法をメモ。
Zlib関数を使う
使用するのは gzopen / gzread / gzclose のZlib関数 3つと、読み取ったデータを書き込む fopen / fwrite(fputs) / fclose のファイルシステム関数 3つだけです。
//リネームする
rename('example.gif','example.gz');
//圧縮ファイルを開く
$zd = gzopen('example.gz', "r");
$contents = gzread($zd, 1000000);
gzclose($zd);
//解凍したデータを書き込む
$fp = fopen('example.gif',"wt");
fputs($fp,$contents);
fclose($fp);
たったこれだけです。Zlib関数も基本的にはファイルシステム関数と使い方が同じなので簡単です。