ユーザ用ツール

サイト用ツール


プログラム言語:php:laravel:csvダウンロード

【Laravel】CSVダウンロード(エクスポート)

Laravel で CSV ダウンロード機能を実装する一例。

App\Http\Controllers\CsvController.php

文字コードを SJIS で出力する場合の例。

まとめて文字コードを UTF-8 から SJIS(CP932) に変換する例

  1. use Symfony\Component\HttpFoundation\StreamedResponse;
  2.  
  3. class CsvController extends Controller
  4. {
  5. public function download()
  6. {
  7. $users = Users::get();
  8.  
  9. $response = new StreamedResponse(function () use ($users) {
  10. $stream = fopen('php://output', 'w');
  11.  
  12. stream_filter_prepend($stream, 'convert.iconv.utf-8/cp932//TRANSLIT');
  13.  
  14. fputcsv($stream, [
  15. 'ID', '名前', 'メールアドレス'
  16. ]);
  17.  
  18. foreach ($user as $key => $user) {
  19. fputcsv($stream, [
  20. $user->id,
  21. $user->name,
  22. $user->email,
  23. ]);
  24. }
  25.  
  26. fclose($stream);
  27. });
  28.  
  29. $file_name = 'ファイル名.csv';
  30.  
  31. $response->headers->set('Content-Type', 'application/octet-stream');
  32. $response->headers->set('content-disposition', 'attachment; filename=' . $file_name);
  33.  
  34. return $response;
  35. }
  36. }

1行毎に文字コードを UTF-8 から SJIS-win に変換する例

  1. class CsvController extends Controller
  2. {
  3. public function download()
  4. {
  5. $csv_headers = ['No.', 'Name', 'Date'];
  6. $csv_body = [];
  7.  
  8. // DB からデータを読み込むなどし csv_body に格納
  9.  
  10. return response()->streamDownload(
  11. function () use ($csv_headers, $csv_body) {
  12. $stream = fopen('php://output', 'w');
  13.  
  14. mb_convert_variables('SJIS-win', 'UTF-8', $csv_headers);
  15. fputcsv($stream, $csv_headers);
  16.  
  17. foreach ($csv_body as $line) {
  18. mb_convert_variables('SJIS-win', 'UTF-8', $line);
  19. fputcsv($stream, $line);
  20. }
  21.  
  22. fclose($stream);
  23. }, 'file_name.csv',
  24. ['Content-Type' => 'application/octet-stream']
  25. );
  26. }
  27. }

コメント

コメントを入力. Wiki文法が有効です:
 
プログラム言語/php/laravel/csvダウンロード.txt · 最終更新: 2024/11/06 08:47 by humolife