- ベストアンサー
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となっているのも意味不明です。 だれか助けてください(><
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
header("Pragma: public"); を追加してみたらどうでしょうか?
その他の回答 (2)
- hrm_mmm
- ベストアンサー率63% (292/459)
状況に矛盾があるように感じるのですが、 >csv.phpをダウンロードすることになってしまい phpソースが表示されて php自体が動作してないのかと思えば、 >表示だけならばっちりでている と言うことなのですけど、ソース表示じゃなくて、出力したい文字列なのですよね? 何かエラー表示とか出てませんか?画面にエラー表示しないようにしているなら、エラーログは記録していないのでしょうか? phpが動作していて、header 送信が無効になるのは、おおむねheader関数呼び出し前に、よけいな文字(改行空白含む)が出力されてるのが原因ですけど。
補足
申し訳ありません。説明不足でした。 >表示だけならばっちりでている ですが、上の画像にある「開く」を押した際のことです。 「開く」を押すとブラウザ上にCSVのデータがしっかり表示されるということです。 わかりづらい説明で申しわけありません。
- amountainblast
- ベストアンサー率33% (63/186)
こんにちわ。 headerの指定ですが、 header ("Content-Description: File Transfer"); は必要なのでしょうか? 私は header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=output.txt"); の2行しか書かないのですが、それで問題なく動いています。
補足
header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=output.txt"); この2つで通常は動くはずなのですがどうしてもうまく動かないので仕方なくどこかのサイトに載っていた header ("Content-Description: File Transfer"); をおまじないノリで書き足してみました(汗) かなり適当で申し訳ありません。。
お礼
tsaitoさんのいわれたヘッダを元にいろいろ探してみた結果。 session_cache_limiter(’public’); を追加したらばっちり動くようになりました。 ありがとうございました。
補足
だめでした・・・今まで通り 「Internet Explorer では、www.aaa.co.jp -csv.php をダウンロードできません。 このインターネットサイトを開くことができませんでした。要求されたサイトが使用できないか、見つけることができません。後でやり直してください。」 とでてしまいます。。。