Streaming Downloads: Export Large Files Without Crashing Memory
Stream large CSV/exports efficiently so your Laravel app stays stable.
A common mistake is generating a large export fully in memory and then returning it. This can crash servers. Streaming sends data chunk by chunk. ## Stream a CSV response ```php return response()->streamDownload(function () { $handle = fopen('php://output', 'w'); fputcsv($handle, ['id', 'name', 'email']); User::query()->chunk(1000, function ($users) use ($handle) { foreach ($users as $user) { fputcsv($handle, [$user->id, $user->name, $user->email]); } }); fclose($handle); }, 'users.csv'); ``` ## Flow ```mermaid flowchart LR A[Request Export] --> B[Chunk Query] B --> C[Write Rows] C --> D[Stream to Client] ``` In the next tutorial, we will implement advanced search filters with query builders.