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. Laravel

    物流の受注・発送管理システムのつくり方を考えてみる【Laravel】

    プログラミングを上達するための秘訣は「何かをつくる」ということだと思っ…

  2. Laravel

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

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

  3. Laravel

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

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

  4. Laravel

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

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

  5. Laravel

    【Laravel】多対多テーブルを複数つくる方法【ちょっとコツがいります】

    とある不動産検索システムの案件で、物件ごとに、設備の情報(例え…

  6. Laravel

    【Webアプリ実践記】JSすら怪しい37歳おっさんが独学でVue.js+Laravelでwebアプリ…

    本業Webマーケッターと育児をしながら独学でwebアプリをつくってみる…

Sponsored link

最近の記事

Sponsored link
  1. P5.js (Processing)

    配列をわかりやすく『ゴディバ』で例えてみる〜ボールを100個に増やしたり【P5.…
  2. プログラミング

    『プログラミング教育』より大事な事を考えてみる~AI時代を見据えて~
  3. docker初心者向けdocker-composeからやったほうがいいかもよ

    ツール

    【Docker】初心者はdocker-composeから始めた方がいいかもしれな…
  4. 検索システム

    バリアフリーなホテル のページをオープンしました。
  5. クリエイティブコーディング

    プログラミングと三角関数〜小学生でもすんなりわかる三角関数を目指して
PAGE TOP