From 2a99e23e6d2dfa8898eb7e2a9be97cbe9b819b2c Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Mon, 9 May 2022 15:25:06 +0100 Subject: [PATCH] Updated attachment download to check OB before cleaning it Call to `ob_end_clean` would error if the environment did not use the PHP `output_buffering` option. This adds an additional check and updates the comment to be more specific to the exact scenario of the condition. Tested with output_buffering=Off and output_buffering=4096 Closes #3415 --- app/Http/Controllers/Controller.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index c00ac938b..5b2221fc1 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -127,9 +127,11 @@ abstract class Controller extends BaseController protected function streamedDownloadResponse($stream, string $fileName): StreamedResponse { return response()->stream(function () use ($stream) { - // End & flush the output buffer otherwise we still seem to use memory. + + // End & flush the output buffer, if we're in one, otherwise we still use memory. + // Output buffer may or may not exist depending on PHP `output_buffering` setting. // Ignore in testing since output buffers are used to gather a response. - if (!app()->runningUnitTests()) { + if (!empty(ob_get_status()) && !app()->runningUnitTests()) { ob_end_clean(); }