CSVをダウンロードするWebアプリをPHPで実装する方法。
しばしば必要になるが、そのたびに調べ直してるので、後日のためにまとめてみる。
- floatingdays: PHPの fputcsv()で CSVを出力する
- CSVを作成するにはfputcsv()が便利
- floatingdays: PHPで Content-typeを指定してテキスト以外のファイルを出力する
- PHPの出力としてHTML以外を出力する場合は header('Content-Type: xxxx/xxxx') を使う
- Content-Typeは、"application/x-csv"あたりが無難か?
- ダウンロード後に保存する際のファイル名は、header("Content-Disposition: attachment; filename=$fileName") で指定する
- ファイル名を指定しないと、URLのファイル名部分になってしまう
- fujishinko 雑記帳 : PHP CSV出力 (fputcsv 使用)
- fopen('php://output', 'w') を使えば、fputcsv()で作成したCSVをサーバ上に保存しないで出力できる
- ninnin.net blog: PHP:httpsでCSVをダウンロードできない
- httpsではIEでCSVをダウンロードできない場合があるので注意?
まとめるとこんな感じか。
$fileName = 'ダウンロードして保存する時のファイル名.csv';
$fileName = mb_convert_encoding($fileName, 'SJIS-WIN');
header('Content-Type: application/x-csv');
header("Content-Disposition: attachment; filename=$fileName");
$fp = fopen('php://output', 'w');
$rows = /* 配列の集合(DBから取得したデータとか) */
foreach ($rows as $row) {
mb_convert_variables('SJIS-WIN', mb_internal_encoding(), $row);
fputcsv($fp, $row);
}
fclose($fp);