プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。ブラウザからリクエストがあった際に、
ローカルに保存されている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

A 回答 (2件)

意外にLhacaでは解凍出来ず、解凍レンジだと解凍できる


なんてことがあったりします。

0Aは改行コード
09はタブということから、出力時に改行やタブが混じってるのだと思います。

良く

?>

とPHPを閉じた後に改行を書いてたりすると発生するので確認してみてください。

#質問の意図を汲み違えてたらごめんなさい。
    • good
    • 0
この回答へのお礼

おっしゃる通りでした!○| ̄|_
PHP初心者っぷりを発揮してしまいました・・・・
改行を取ったら問題なくダウンロード出来ました。

#質問の意図を汲み違えてたらごめんなさい。
ご指摘通りの意図です。
「コードじゃなくてもっと上位のレイヤの問題?」とか
一人考えていた自分が恥ずかしいです、、、、

質問して良かったです。
どうもありがとうございました!

お礼日時:2007/08/28 10:28

<?php


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

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

ご指摘感謝です!
どうもありがとうございました。

お礼日時:2007/08/28 10:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!