バックエンド

【PHP】【Laravel】CSVエクスポートの方法〜5つのポイント〜

ちょっと前にPHPでCSVインポートをする方法を書きまして。

今回はCSVエクスポート(ダウンロード)の方法をまるっとまとめたいと思います。

Sponsored link

PHPでCSVエクスポートをするコード[laravel]

コントローラーのコードはこんな感じです。

大事な箇所を解説してみます。

PHPでCSVエクスポートの方法 ポイント1 response->stream

『laravel』でCSVエクスポートする方法をググっていたら、
こんなコメントを見つけたんですね。

CJxD
Newer versions of Laravel removed the Response::stream() function. Instead, use response()->stream($callback, 200, $headers); –
CJxD
直訳:新しいバージョンのlaravelはResponse::stream() を消したので、代わりにresponse()->stream($callback, 200, $headers);を使うといいよ。

参照記事:CSV export in laravel 5 controller

アオキ
そうなんや、ならさっそく取り入れてみよ。

と取り入れつつ、いくつかググって実現できました。

return response()->stream($callback, 200, $headers);

streamの中に、
コールバック(関数、今回はCSVエクスポートする処理)と、
ヘッダ情報を指定しています。

まずはヘッダから。

Sponsored link

PHPでCSVエクスポートの方法 ポイント2 HTTPヘッダ

インターネットを通じてやりとりする時は必ず、

『HTTP(エイチティーティーピー)』というルールにしたがう必要があります。

HTTP・・Hyper Text Transfer Protocol(ハイパーテキストトランスファープロトコル)

『プロトコル』というのが協定とか、決まりみたいな意味です。

で、

HTTPというルールでは必ず、『HTTPヘッダ』をつける決まりになってます。

このページがどんな種類で、どんな設定になってて・・

といった情報をまとめたのが、『HTTPヘッダ』になります。

今回の『HTTPヘッダ』はこんな感じです。

『キャッシュ』・・一度開いたWebページのデータを保存して、次回アクセス時にさくっと表示できる仕組み

『キャッシュ』を保存するようにすると、
次回アクセス時に読み込むスピードが早くなったりするメリットはあるんですが、
CSVエクスポートに関して言えば、キャッシュは保存しなくていいのかなと思います。

参考記事
『Webを支える技術』 第9章 HTTPヘッダ まとめメモ

次に、return response()->stream($callback, 200, $headers);

の中の、$callback の中で書かれている処理のポイントを。

PHPでCSVエクスポートの方法 ポイント3 お決まりの関数達

「PHP CSV エクスポート」でググるとかなりのサイトで
これらの関数が使われています。

ファイル開いて、
データ追記して、
ファイル閉じて。

アオキ
ここはセットで覚えておくといいんでしょうね。
Sponsored link

PHPでCSVエクスポートの方法 ポイント4 文字化け対策

文字化けに関しては、

WindowsとMacで設定が違うんですが、今回はWindowsを対象に。

WindowsでCSVを開く時はエクセルを使うことが多く、

エクセルは文字コードが『SJIS(エスジス)』になっているので、『SJIS』に合わせないと文字化けしてしまいます。

PHPでは mb_convert_variables という関数を使って文字コードを変更できるので、

1行ずつ文字コードを『UTF-8』から『SJIS』に変更するようにしています。

PHPでCSVエクスポートの方法 ポイント5 forechで繰り返す

データベースからデータを取得して、
foreachで1行ずつCSVファイルに追記していきます。

100行なら100回。
1000行なら1000回繰り返します。

データベースのデータをとってくる際は『オブジェクト型』になっているので -> で指定する必要あります。

参考記事

これらを踏まえてもう一回コードを。

アオキ
一行一行全部意味があるんですよねぇ、プログラミングって奥が深い・・
Sponsored link

さいごに

仕事で使うWEBサイトやWEBページでは、

必ずと言っていいほど『CSVエクスポート(ダウンロード)』の要望があります。

CSV機能ほしい人
え?なんでCSVでダウンロードできないの?

的な。

そんな時のために、

  1. responseとstream
  2. ヘッダ情報追加する
  3. よく使う関数(fopen, fputcsv, fclose)を知っておく
  4. 文字化け対策
  5. foreachで回す

といった流れをざっくりでも把握しておくと、いざって時にさくっと作れるかもですね。

アオキ
CSVなんだかんだ便利なんですよねー、エクセルでも加工しやすいし、資料とかつくりやすいし。

参考記事

laravel5.3 CSVダウンロードを実装する(あしたからがんばるさん)

Laravel5.4で、CSVダウンロード(一言多いプログラマーの独り言)

追記 2019/1/22
Laravel5.5にアップデート後 実行したらなぜかエラー。

いくつかぐぐると、config/database.php 内の strict が true になっていることが原因のようで、

falseに変更するとOKになりました。

いずれ原因解明したいところです。
QueryBuilderでgroupByをするとSyntax error or access violationがでる件

『PHP(Laravel)』ではこんな記事も読まれています。

1. 【Laravel(PHP)】初心者向け アプリのつくり方 をリリースしました【techpit】

2. 【PHP】【Laravel】CSVエクスポートの方法〜5つのポイント〜

3. 【PHP】オブジェクトと連想配列の違いについて調べてみた【初心者向け】

4. 【PHP】CSVインポートの方法〜大量データもバルクインサートでバッチリ!〜【laravel】

5. 【PHP】【図解】クラスと抽象クラスとインターフェースとトレイトとDIをまとめてみた【初心者向け】

6. 【PHP】配列や連想配列が覚えづらかったので学校に例えてみた【初心者向け】

7. 【PHP】ホームページに天気予報を表示させる方法【Webスクレイピング】【初心者向け】

8. 【Laravel】Webアプリ環境構築の仕方【Vue.js】【初心者向け】

9. 【PHP】2次元(多次元)配列でデータ取得したいならarray_columnがめっさ便利

アオキ
ツイッターでも記事ネタ含めちょろちょろ書いていくので、よろしければぜひフォローお願いしますm(_ _ )m

アオキのツイッターアカウント


関連記事一覧 (一部広告あり)

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


最近の記事

  1. バックエンド

    【Laravel(PHP)】初心者向け アプリのつくり方 をリリースしました【t…
  2. 音楽

    コードの転回形の練習方法をまとめてみた【大人のピアノ】
  3. CG関連

    【P5.js】遊ぶようにプログラムできるクリエイティブコーディング〜はじめのいっ…
  4. バックエンド

    【厳選8冊】ホームページを作れるようになるためのおすすめ本【初心者向け】
  5. IoT関連

    【Arduino】ラジコンをつくってみた 〜今ドキのプログラムの覚え方
PAGE TOP