- ベストアンサー
DBからCSV出力する方法
DBのデータをCSVファイルでダウンロードする機能を作成しています。 DBのデータをカンマ区切りで変数に格納するところまではできましたが、CSVでのダウンロード(ダウンロードダイアログ)ができません。 以下が実際の記述ですが、間違いを指摘いただけないでしょうか。 ※$result 出力するデータ全てが,区切りで格納されている <PHPファイル内> $size = strlen($result); $filename = csv_dl.csv; //csvdll header("Content-Disposition: inline; filename=\"".basename($filename)."\""); header("Content-Length: ".$size); header("Content-Type: application/octet-stream"); 以上です。 リターンが遅くなるかもしれませんが、どうかよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
がると申します。とりあえず端的に。 > $filename = csv_dl.csv; 文字列はクオートしましょう。 $filename = 'csv_dl.csv'; が正しい書式です。 headerですが。RFCによるとMIME typeはtext/csvですので > header("Content-Type: application/octet-stream"); ではなく header("Content-Type: text/csv"); になります。 CSVの中身は$resultに入っている感じでしょうか? だとすると、headerの後に最低限 print $result; が必要かと思われます。 以上ざっくりとですが。
その他の回答 (1)
- みずの(@mizuno3)
- ベストアンサー率73% (192/263)
見た感じでは問題点は無い様に思えます。 特定のブラウザのみお節介機能が動いているのかも知れません。 .csvではない拡張子にしたらダウンロードされるとか。 また、実際に出力されているHTTPヘッダを確認してみるのもいいんじゃないかな?と思います。
お礼
回答ありがとうございます。 お礼が遅くて申し訳ありません。 header("Content-Type: application/octet-stream");をheader("Content-Type: text/csv");に変更することでダウンロードが可能になりました! 別のプログラムを作ったときにheader("Content-Type: application/octet-stream");でcsvダウンロードしてたので思いもしませんでした; >実際に出力されているHTTPヘッダを確認してみるのもいいんじゃないかな?と思います。 そうですね。 勉強のためにも一度1つづつ理解していこうと思います。 ありがとうございました。
お礼
回答ありがとうございます。 >header("Content-Type: text/csv"); これが原因でした; ありがとうございます! >print $result; は、こちらに書くときに消してしまっていたようで、実際のファイルには記述できていました。 CSVダウンロードとかでいろいろ検索していたのですが、そもそもheaderについて全然勉強していないというか、付け焼刃というか・・・ もっとしっかりと勉強しようと思います。 ありがとうございました!