gallu.hatenadiary.jp で読み込みを書いていたのですが、書き出しをそういや書いてなかったなぁ、と思って。
先にちょろっと考察したいのが、Content-Type。
本来は text/csv が正解。
ただ、割とちょいちょい application/octet-stream を見かけて*1、まぁその辺は「どっちでもなのかなぁ」と。
なんか、以前に「"いいからとにかくダウンロードしろや"って時に octet-stream を使う」的な話を聞いた記憶があるのですが、ちょいとその辺はすみません曖昧な感じです。
とりあえず今回は、綺麗に text/csv を使います、が、まぁお好みで。
ダウンロードファイル名が「なんでもいい」のなら別なのですが、そうでなければまぁある程度指定をしたいと思うので、その辺は指定可能にしておきます。
&
ヘッダ出力が絡むので、一応「事前に ob_start() がcallされている」前提で記載をしています。
書いてなかったら、ob_end_clean(); をコメントアウトしてください。
&
出力データは $data に「配列の配列」の形で入っている前提です。
// キャッシュ破棄&終了 ob_end_clean(); // ダウンロード用ファイル名を作成 $download_filename = 'sample.' . date('Ymd') . '.csv'; // 必要なヘッダを出力 header('Content-Type: text/csv'); header("Content-Disposition: attachment; filename={$download_filename }"); // 出力用のハンドルの作成 $file_name = 'php://filter/write=convert.iconv.UTF-8%2FSJIS-win/resource=php://output'; $file_obj = new SplFileObject($file_name, 'w'); // 出力 foreach($data as $datum) { $file_obj ->fputcsv($datum); }
細かい所をちょいちょいと忘れるので、メモ代わりに。