Doc #71486 [Opn->Csd]: Output handler flags for ob_end_clean and ob_end_flush

[email protected] Sun, 07 Jan 2024 14:03:39 +0000
Newsgroups php.doc.bugs
Message-ID <[email protected]>
Edit report at https://bugs.php.net/bug.php?id=71486&edit=1

 ID:                 71486
 Updated by:         [email protected]
 Reported by:        php at login dot hedim dot ch
 Summary:            Output handler flags for ob_end_clean and
                     ob_end_flush
-Status:             Open
+Status:             Closed
 Type:               Documentation Problem
 Package:            Output Control
 PHP Version:        5.6.17
-Assigned To:        
+Assigned To:        girgias
 Block user comment: N
 Private report:     N

 New Comment:

Closed by https://github.com/php/doc-en/pull/3073


Previous Comments:
------------------------------------------------------------------------
[2016-03-09 15:33:05] [email protected]

Related To: Bug #69404

------------------------------------------------------------------------
[2016-03-09 15:32:27] [email protected]

See also #69404

------------------------------------------------------------------------
[2016-03-09 15:28:02] [email protected]

Actually, PHP_OUTPUT_HANDLER_CLEANABLE is only needed for `ob_clean()` because that's the only operation, that would leave the output handler alive instead of destroying and popping it off the stack.

------------------------------------------------------------------------
[2016-01-30 15:56:54] php at login dot hedim dot ch

Description:
------------
According to http://php.net/manual/en/function.ob-end-clean.php: The output buffer must be started by ob_start() with PHP_OUTPUT_HANDLER_CLEANABLE and PHP_OUTPUT_HANDLER_REMOVABLE flags. Otherwise ob_end_clean() will not work.

However, ob_end_clean() seems to work with only PHP_OUTPUT_HANDLER_REMOVABLE.

According to http://php.net/manual/en/function.ob-end-flush.php: The output buffer must be started by ob_start() with PHP_OUTPUT_HANDLER_FLUSHABLE and PHP_OUTPUT_HANDLER_REMOVABLE flags. Otherwise ob_end_flush() will not work.

However, ob_end_flush() seems to work with only PHP_OUTPUT_HANDLER_REMOVABLE.

The test script below shows the problem with ob_end_clean(). To see the problem with ob_end_flush(), simply replace ob_end_clean() with ob_end_flush().


Test script:
---------------
ob_start(null, 0, PHP_OUTPUT_HANDLER_REMOVABLE);
echo "1";
ob_end_clean();
echo "2";


Expected result:
----------------
A notice from ob_end_clean() and output "12"

Actual result:
--------------
Output "2"


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=71486&edit=1