ユーザーはクエリ結果をCSV形式でダウンロードできます。ファイルは小さいですが(数KB)、内容は重要です。
最初のアプローチは、php出力バッファーを使用することですphp://
:
$callback = function() use ($result, $columns) {
$file = fopen('php://output', 'w');
fputcsv($file, $columns);
foreach($result as $res) {
fputcsv($file, array($res->from_user, $res->to_user, $res->message, $res->date_added));
}
fclose($file);
};
return response()->stream($callback, 200, $headers);
2番目のアプローチは、laravelsストレージシステムに新しいフォルダーを作成し、それをプライベートに設定して、そこからファイルをダウンロードすることです。ダウンロード後にファイルを削除することもできます。
'csv' => [
'driver' => 'local',
'root' => storage_path('csv'),
'visibility' => 'private',
],
作成/ダウンロードコードは次のとおりです。
$file = fopen('../storage/csv/file.csv', 'w');
fputcsv($file, $columns);
foreach($result as $res) {
fputcsv($file, array($res->from_user, $res->to_user, $res->message, $res->date_added));
}
fclose($file);
return response()->make(Storage::disk('csv')->get('file.csv'), 200, $headers);
このリターンにより、ダウンロード後にファイルが即座に削除されます。
return response()->download(Storage::disk('csv')->path('file.csv'))
->deleteFileAfterSend(true);
より安全なものは何ですか?より良いアプローチは何ですか?私は現在、ストレージに関する2番目のアプローチに傾いています。
最初のオプションだと思います
The first approach is to use php output buffer php://:
ファイルをどこにも保存しない場合よりも安全です。