Laravel

【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. 【PHP】【laravel】CSVエクスポートの方法〜5つのポイント〜

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

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

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

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

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

7. 【Laravel5.5】Webアプリケーションを作るためのゆるめの環境構築編【Node.js】【npm】【Vue.js】【初心者向け】

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

コメント

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

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

CAPTCHA


Sponsored link

関連記事

  1. #100DaysOfCode

    【Vue.js/Laravel】Webアプリ実践記 37歳おっさんが独学でVue.js+Larave…

    webアプリ実践記 0日目~10日目webアプリ実践記 11…

  2. #100DaysOfCode

    【Vue.js/Laravel】Webアプリ実践記 37歳おっさんが独学でVue.js+Larave…

    webアプリ実践記 0日目~10日目webアプリ実践記 11…

  3. PHP

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

    ググって見ても配列のわかりやすい記事があまりなかったので、…

  4. Laravel

    【laravel】ダミー(テスト)データを作る方法 シーダー(seeder)とfactoryとfak…

    『PHPの現場』というポッドキャストの放送で、ひときわ印象に残…

  5. Django

    【Django】【Laravel】【RubyOnRails】を比較してみた【初心者向け】【体験談】

    さらに開発力を高めるべく、先日とあるサロンに入会しまして、…

  6. Laravel

    【Laravel(PHP)】でできる事をわかりやすく(ざっくりと)まとめてみた【用語集も兼ねて】【初…

    ウェブ職人のためのPHPフレームワークといえばやっぱり『Larav…

Sponsored link

最近の記事

アーカイブ

Sponsored link
  1. Vue.js

    【Vue.js】かっこいいフォトギャラリーを発見したのでソースを読んでみた。カテ…
  2. PHP

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

    【PHP】【図解】クラスと抽象クラスとインターフェースとトレイトとDIをまとめて…
  4. Laravel

    【Laravel(PHP)】でできる事をわかりやすく(ざっくりと)まとめてみた【…
  5. Laravel

    【Laravel5.5】Webアプリケーションを作るためのゆるめの環境構築編【N…
PAGE TOP