Berikut adalah contoh mudah yang menunjukkan cara mengeluarkan 100 baris data menggunakan tindak balas streaming:
Route::get('/stream', function () { return response()->stream(function () { foreach (range(1, 100) as $number) { echo "Line {$number}\n"; ob_flush(); flush(); } }, 200, ['Content-Type' => 'text/plain']); });
<?php namespace App\Http\Controllers; use App\Models\Order; use Illuminate\Support\Facades\DB; class ExportController extends Controller { public function exportOrders() { return response()->stream(function () { // 输出 CSV 头部 echo "Order ID,Customer,Total,Status,Date\n"; ob_flush(); flush(); // 分块处理订单以保持内存效率 Order::query() ->with('customer') ->orderBy('created_at', 'desc') ->chunk(500, function ($orders) { foreach ($orders as $order) { echo sprintf( "%s,%s,%.2f,%s,%s\n", $order->id, str_replace(',', ' ', $order->customer->name), $order->total, $order->status, $order->created_at->format('Y-m-d H:i:s') ); ob_flush(); flush(); } }); }, 200, [ 'Content-Type' => 'text/csv', 'Content-Disposition' => 'attachment; filename="orders.csv"', 'X-Accel-Buffering' => 'no' ]); } }
Atas ialah kandungan terperinci Mengoptimumkan penghantaran data yang besar dengan respons streaming laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!