symfony2でcsvを出力してみた
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | <?php namespace hogeBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Component\HttpFoundation\Response; class hogeController extends Controller { /** * @Route("/csv_download", name="hoge_csv_download") */ public function csvDownloadAction() { // ini_set // 実行時間が長く、使うメモリが多ければ、設定したほうがいい ini_set('memory_limit', '2048M'); ini_set('max_execution_time', 0); // 出力する内容 $contents = "...";// ここで省略する // uft8の文字コードをsjisに変換 $contents = mb_convert_encoding($contents, 'SJIS-win', 'UTF-8'); // response作成 $response = new Response($contents); // 出力csvファイルの名前を指定 $response->headers->set('Content-Type', "application/octet-stream; name=hoge_".date('YmdHis').".csv"); $response->headers->set('Content-Disposition', "attachment; filename=hoge_".date('YmdHis').".csv"); return $response; } private function toFullKana($str, $len=0) { // 全角カタカナに変換 $str = mb_convert_kana($str, "KAS", 'UTF-8'); if ($len > 0) { if (mb_strlen($str, 'UTF-8') > $len) { $str = mb_substr($str, 0, $len, 'UTF-8'); } } return $str; } private function toHalfKana($str, $len=0) { // 半角カタカナに変換 $str = mb_convert_kana($str, "kVa", 'UTF-8'); if ($len > 0) { if (mb_strlen($str, 'UTF-8') > $len) { $str = mb_substr($str, 0, $len, 'UTF-8'); } } return $str; } } |
注意点
1、出力する前、文字コードをsjisに変換することを忘れないこと
2、全角・半角カナ変換(mb_convert_kana)に、自動識別に頼らずに文字コードを指定しよう
3、mb_strlenとmb_substrに、文字コードを指定しないと、間違う結果が出てくるから、必ず文字コード指定で行きましょう。
plainなPHPで簡単にできるcsv出力でも、フレームワークを使うと、書くことが多くなる傾向です。
Author Profile
スターフィールド編集部
SHARE