This repository was archived by the owner on Mar 24, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 389
This repository was archived by the owner on Mar 24, 2025. It is now read-only.
streamDownload not working and sometimes also throw "allowed memory size ... exhausted" #535
Copy link
Copy link
Open
Description
Make sure you read Issues Guideline and answer these questions before submitting your issue. Thanks!
(Any non-English issues will be closed immediately.)
- Please provide your PHP and Swoole version. (
php -v
andphp --ri swoole
)
PHP 7.4.21 (cli) (built: Jul 22 2021 02:54:54) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
swoole
Swoole => enabled
Author => Swoole Team <[email protected]>
Version => 4.8.12
Built => Oct 9 2022 10:32:04
coroutine => enabled with boost asm context
epoll => enabled
eventfd => enabled
signalfd => enabled
cpu_affinity => enabled
spinlock => enabled
rwlock => enabled
openssl => OpenSSL 1.1.1n 15 Mar 2022
dtls => enabled
http2 => enabled
mutex_timedlock => enabled
pthread_barrier => enabled
futex => enabled
async_redis => enabled
Directive => Local Value => Master Value
swoole.enable_coroutine => On => On
swoole.enable_library => On => On
swoole.enable_preemptive_scheduler => Off => Off
swoole.display_errors => On => On
swoole.use_shortname => On => On
swoole.unixsock_buffer_size => 8388608 => 8388608
- Please provide your Laravel/Lumen version.
Laravel 8.83.13
- Which release version of this package are you using?
v2.12.1
- What did you do? If possible, provide a recipe for reproducing the error.
I want to provide customer a option to export large data from database, but when I tried streamdownload, the application only init the download, but never starting download it. Here is a reproduce code:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Str;
use Illuminate\Support\LazyCollection;
class IndexController extends Controller
{
/**
* Undocumented function
*
* @param Request $request
* @return void
*/
public function export(Request $request)
{
$collection = LazyCollection::times(100000, fn () => [
'user_id' => mt_rand(10, 100),
'name' => Str::random(mt_rand(10, 20)),
'logged_in_at' => now()->toIsoString(),
]);
return response()->streamDownload(function () use ($collection) {
$output = fopen('php://output', 'w+');
fputcsv($output, ['User ID', 'Name', 'Login Time']);
$collection->each(fn ($row) => fputcsv($output, $row));
fclose($output);
}, 'file.csv');
}
}
- What did you expect to see?
download large data by streaming without consuming all memory
- What did you see instead?
The browser only init the download, but never starting download content.
Metadata
Metadata
Assignees
Labels
No labels