• ベストアンサー

PHP→DB→CSV 「ダウンロードできません」

DBの内容をPHPを使ってCSVに変換してダウンロードするプログラムを使っています。 プログラム(csv.php)の先頭に header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=output.txt"); header ("Content-Description: File Transfer"); を書いているのですが、いざダウンロードをする画面になるとoutput.csvでなくcsv.phpをダウンロードすることになってしまいダウンロードができません。 表示だけならばっちりでているのですが、、、ファイルタイプがHTMLとなっているのも意味不明です。 だれか助けてください(><

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

  • ベストアンサー
  • tsaito
  • ベストアンサー率68% (17/25)
回答No.3

header("Pragma: public"); を追加してみたらどうでしょうか?

mihune
質問者

お礼

tsaitoさんのいわれたヘッダを元にいろいろ探してみた結果。 session_cache_limiter(’public’); を追加したらばっちり動くようになりました。 ありがとうございました。

mihune
質問者

補足

だめでした・・・今まで通り 「Internet Explorer では、www.aaa.co.jp -csv.php をダウンロードできません。 このインターネットサイトを開くことができませんでした。要求されたサイトが使用できないか、見つけることができません。後でやり直してください。」 とでてしまいます。。。

その他の回答 (2)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

状況に矛盾があるように感じるのですが、 >csv.phpをダウンロードすることになってしまい phpソースが表示されて php自体が動作してないのかと思えば、 >表示だけならばっちりでている と言うことなのですけど、ソース表示じゃなくて、出力したい文字列なのですよね? 何かエラー表示とか出てませんか?画面にエラー表示しないようにしているなら、エラーログは記録していないのでしょうか? phpが動作していて、header 送信が無効になるのは、おおむねheader関数呼び出し前に、よけいな文字(改行空白含む)が出力されてるのが原因ですけど。

mihune
質問者

補足

申し訳ありません。説明不足でした。 >表示だけならばっちりでている ですが、上の画像にある「開く」を押した際のことです。 「開く」を押すとブラウザ上にCSVのデータがしっかり表示されるということです。 わかりづらい説明で申しわけありません。

回答No.1

こんにちわ。 headerの指定ですが、 header ("Content-Description: File Transfer"); は必要なのでしょうか? 私は header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=output.txt"); の2行しか書かないのですが、それで問題なく動いています。

mihune
質問者

補足

header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=output.txt"); この2つで通常は動くはずなのですがどうしてもうまく動かないので仕方なくどこかのサイトに載っていた header ("Content-Description: File Transfer"); をおまじないノリで書き足してみました(汗) かなり適当で申し訳ありません。。

関連するQ&A