• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

意外にLhacaでは解凍出来ず、解凍レンジだと解凍できる なんてことがあったりします。 0Aは改行コード 09はタブということから、出力時に改行やタブが混じってるのだと思います。 良く ?> とPHPを閉じた後に改行を書いてたりすると発生するので確認してみてください。 #質問の意図を汲み違えてたらごめんなさい。

noname#92546
質問者

お礼

おっしゃる通りでした!○| ̄|_ PHP初心者っぷりを発揮してしまいました・・・・ 改行を取ったら問題なくダウンロード出来ました。 #質問の意図を汲み違えてたらごめんなさい。 ご指摘通りの意図です。 「コードじゃなくてもっと上位のレイヤの問題?」とか 一人考えていた自分が恥ずかしいです、、、、 質問して良かったです。 どうもありがとうございました!

その他の回答 (1)

回答No.2

<?php の前、一行目等に改行コードなどありませんか? #1さん指摘の通り、ASCII文字で言えば、OAは改行コード(LF/NL)、09は水平タブ(HT)です。

noname#92546
質問者

お礼

もう全くもってソレでした!(´△⊂)・. スクリプトの先頭と最後にヘンなゴミを自分で入れていました・・・ PHPファイル自体が出力対象となる事に気がつきませんでした。 (あああ痛い初心者orz) ご指摘感謝です! どうもありがとうございました。