PHPでgz形式のファイルをダウンロード→解凍出来ない
こんにちは。ブラウザからリクエストがあった際に、
ローカルに保存されているgzip形式で圧縮した
XMLファイルをPHPで読み込んで
ダウンロードさせる、というプログラムを作成しております。
ダウンロードした後、解凍しようとすると
「破損ファイルです」とのメッセージが出て
解凍が出来ません。
ダウンロードしたファイルをバイナリエディタで開いてみると、
先頭に"0A"、
末尾に"0A090A"
というゴミ?なんでしょうか、変なものが付いています。
(これが何かは調べても分かりませんでした。
また、このゴミを削除すると解凍出来ました)
ローカルに保存したファイル、及び、PHP内の読み込みまではゴミは付いていませんでした。
//ソース抜粋
header('Content-Type: application/gzip;');
header('Content-disposition: attachment; filename=hogexml.gz');
$fp = fopen('/home/hoge/hogexml.gz', 'rb');
$str = fread($fp, filesize('/home/hoge/hogexml.gz'));
$echo $str; //この時点でbin2hex()で$strをダンプしてもゴミは付いていない
fclose($fp);
ファイルはEUC-JPでDBから取得した文字列をUTF-8に変換してから圧縮して作成しております。
圧縮関数はgzopen(),gzwrite(),gzclose()です。
またブラウザからhttp://hogehoge_arienai.com/hogexml.gzという様に
ファイルを直接指定してダウンロードした場合は問題なく解凍されました。
八方塞がり状態でどうしたら良いものかと・・(´△⊂)・.
こういった現象にちょっとでも心あたりのある方おられましたら
ヒントでも構いませんので、何卒ご返答の程よろしくお願い致しますす。
<PHPスクリプトの動いているサーバ>
OS:FreeBSD6.1
Apache:2.0.58
PHP:5.1.2
<ダウンロードしているクライアント>
WindowsXP Pro
お礼
zlibのインストールができました。 ありがとうございました。
補足
zlib関数を有効にするには、PHPのコンパイル時にconfigureの オプションに--with-zlib[=DIR]を 指定してコンパイルする必要があります。 とありますが、PHPのコンパイル時というのはどういう状態なのでしょうか? また、どのようにしたらzlib関数を利用することができるのでしょうか? 実行環境は apache_2.0.63 php-5.2.5 Windows Xpです。