端くれプログラマの備忘録 Laravel [Laravel] CSVダウンロード

[Laravel] CSVダウンロード

ASCIIオンリーなど文字変換が必要なければ以下のような感じ。

$users = User::all()->toArray();
$stream = fopen('php://output', 'w');
foreach ($users as $user) {
    fputcsv($stream, $user);
}
$headers = array(
    'Content-Type' => 'text/csv',
    'Content-Disposition' => 'attachment; filename="users.csv"',
);
return Response::make('', 200, $headers);

UTF8のDBからShiftJISのCSVを吐きたければ変換加えて以下のような感じ。

$users = User::all()->toArray();
$stream = fopen('php://temp', 'r+b');
foreach ($users as $user) {
    fputcsv($stream, $user);
}
rewind($stream);
$csv = str_replace(PHP_EOL, "\r\n", stream_get_contents($stream));
$csv = mb_convert_encoding($csv, 'SJIS');

$headers = array(
    'Content-Type' => 'text/csv',
    'Content-Disposition' => 'attachment; filename="users.csv"',
);
return response($csv, 200, $headers);

参考サイト

LaravelでCSVダウンロード。 – Qiita
https://qiita.com/niiyz/items/83770cfa6d6bb33c10ab