dポイントプレゼントキャンペーン実施中!

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");


以上です。
リターンが遅くなるかもしれませんが、どうかよろしくお願いいたします。

A 回答 (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;
が必要かと思われます。

以上ざっくりとですが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>header("Content-Type: text/csv");
これが原因でした;
ありがとうございます!

>print $result;
は、こちらに書くときに消してしまっていたようで、実際のファイルには記述できていました。

CSVダウンロードとかでいろいろ検索していたのですが、そもそもheaderについて全然勉強していないというか、付け焼刃というか・・・
もっとしっかりと勉強しようと思います。
ありがとうございました!

お礼日時:2007/11/09 10:02

見た感じでは問題点は無い様に思えます。


特定のブラウザのみお節介機能が動いているのかも知れません。
.csvではない拡張子にしたらダウンロードされるとか。

また、実際に出力されているHTTPヘッダを確認してみるのもいいんじゃないかな?と思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
お礼が遅くて申し訳ありません。

header("Content-Type: application/octet-stream");をheader("Content-Type: text/csv");に変更することでダウンロードが可能になりました!
別のプログラムを作ったときにheader("Content-Type: application/octet-stream");でcsvダウンロードしてたので思いもしませんでした;

>実際に出力されているHTTPヘッダを確認してみるのもいいんじゃないかな?と思います。
そうですね。
勉強のためにも一度1つづつ理解していこうと思います。
ありがとうございました。

お礼日時:2007/11/09 09:57

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