• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPで生成したテキストファイルをダウンロード)

PHPで生成したテキストファイルをダウンロードする方法について

このQ&Aのポイント
  • PHPでMySQLデータベースからデータを取得してテキストファイルに出力し、それをダウンロードさせるプログラムを制作しています。
  • ダウンロード処理前に出力されて残っているテキストファイルは正常なので、ダウンロードの設定が悪いのだろうと思いますが、どう設定してやればいいのか分からない状態です。
  • ファイルを書き込み専用で開いてデータを出力し、ダウンロードさせる際にはヘッダ情報を設定してファイルを出力する必要があります。

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

printでメッセージを出力した時点で、httpレスポンスヘッダ(php標準のcontent-type; text/html)が送出されています。httpレスポンス(content-type: text/html)といくつかのメッセージのあとに、ファイルを返してもブラウザ側では複数のコンテンツは受け取れません(単一のコンテンツとして扱われます)。 #「httpの仕組み」が理解できていれば #間違わない部分なんですが(汗 デバッグ時であればこの状態でもいいですが実運用をテストするのであれば、printは全部カットしてください(dieで止めるのは問題ありません)。

greatchahang
質問者

お礼

ありがとうございます。 phpを触るのはこれが初めてで、httpに関しても完全に素人なもので・・・ ダウンロードをさせるならページへの表示はさせない方が無難、ということですね。 httpのことも少し調べてこようと思います。

その他の回答 (1)

回答No.1

=====以下引用===== 覚えておいて頂きたいのは、 header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、 include または require 関数、他のファイルをアクセスする関数に 空白または空行があり、 header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。 ================= URL : http://php.net/manual/ja/function.header.php ちなみに、 >header("Content-Disposition: attachment; filename=$j_file"); ↓ header("Content-Disposition: attachment; filename='" . $j_file . "'"); では? それから、$tmp_fileと$j_fileの変数が入り乱れてますけど、合ってますか?

greatchahang
質問者

お礼

ありがとうございます。 ・・・リンク先は読んでみたのですが、「つまり・・・どういうことだってばよ?」状態になってしまいました。