[FuelPHP] CSV出力を実装する方法
案件で CSV 出力を実装したのでメモ
Excel で UTF-8 の CSV ファイルは開けない
理由
Excelの場合、CSVファイルはShift-JISとして開くこのため、UTF-8 の CSV ファイルを Excel で開きたい場合は
- 拡張子を別のものに変えて開く
- 先頭に三バイトのBOMを付与したCSVファイルで開く
FuelPHPでの準備
FuelPHPでCSVファイルを出力する場合、CSVファイル用に拵えた配列をto_csv()
に渡してやる必要がある。この手の出力は RestController を使うと楽だが当該案件ではエラーハンドリングなどがあり RestController を使うのは見送った。
以下のようにto_csv()
をオーバライドする
class Format extends Fuel\Core\Format {
public function to_csv($data = null){
$csv = parent::to_csv($data);
return mb_convert_encoding($csv, 'SJIS-win', 'UTF-8');
}
}
参考引用: FuelPHP で CSV の出力 - Qiita
mb_convert_encoding
を挟んでUTF-8
からSJIS-win
に文字エンコーディングを変換する。
これで Excel で開ける CSV ファイルへ変換する事ができる。
CSVファイルを出力する
public static function export_csv($array, $csv_name) { // Response $response = new Response();
// content-type: csv
$response->set_header('Content-Type', 'application/csv');// ファイル名をセット
$response->set_header('Content-Disposition', 'attachment; filename="'. $csv_name .'"');// キャッシュをなしに
$response->set_header('Cache-Control', 'no-cache, no-store, max-age=0, must-revalidate');
$response->set_header('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT');
$response->set_header('Pragma', 'no-cache');// CSV を出力
echo Format::forge($array)->to_csv();
// Response
return $response;
}
お作法通りに出力する。
出力するファイル名などを変えるならここで変える。