From bf72397b9ffd6b133a176d2a539f4116014a78e5 Mon Sep 17 00:00:00 2001 From: Mathias Arlaud Date: Thu, 24 Apr 2025 08:52:37 +0200 Subject: [PATCH] [HttpFoundation] Flush after each echo in `StreamedResponse` --- src/Symfony/Component/HttpFoundation/StreamedResponse.php | 2 ++ .../HttpFoundation/Tests/StreamedResponseTest.php | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/HttpFoundation/StreamedResponse.php b/src/Symfony/Component/HttpFoundation/StreamedResponse.php index 6eedf1c49d2e8..4e755a7cdf07f 100644 --- a/src/Symfony/Component/HttpFoundation/StreamedResponse.php +++ b/src/Symfony/Component/HttpFoundation/StreamedResponse.php @@ -56,6 +56,8 @@ public function setChunks(iterable $chunks): static $this->callback = static function () use ($chunks): void { foreach ($chunks as $chunk) { echo $chunk; + @ob_flush(); + flush(); } }; diff --git a/src/Symfony/Component/HttpFoundation/Tests/StreamedResponseTest.php b/src/Symfony/Component/HttpFoundation/Tests/StreamedResponseTest.php index 2a8fe582501a6..fdaee3a35ff6f 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/StreamedResponseTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/StreamedResponseTest.php @@ -30,10 +30,14 @@ public function testConstructorWithChunks() $chunks = ['foo', 'bar', 'baz']; $callback = (new StreamedResponse($chunks))->getCallback(); - ob_start(); + $buffer = ''; + ob_start(function (string $chunk) use (&$buffer) { + $buffer .= $chunk; + }); $callback(); - $this->assertSame('foobarbaz', ob_get_clean()); + ob_get_clean(); + $this->assertSame('foobarbaz', $buffer); } public function testPrepareWith11Protocol()