|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Thank you for your help! If the status of the bug report you submitted changes, you will be notified. You may return here and check the status or update your report at any time.
The URL for your bug report is:
Bug #42334 Error after ob_start causes buffer flush
Submitted: 2007-08-18 01:49 UTC Modified: 2007-08-20 07:50 UTC
Avg. Score:5.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: ahaig at penguinmililtia dot net Assigned:
Status: Not a bug Package: Output Control
PHP Version: 5.2.3 OS: Mac OS X 10.4.10
Private report: No CVE-ID:
 [2007-08-18 01:49 UTC] ahaig at penguinmililtia dot net
An error that occurs after ob_start() has been called causes the buffer to flush. 

This makes it impossible to appropriately manage output for error handling because sometimes text will randomly be inserted prior to the error output (which means the error output has a full <html></html> tag set, but content gets output before it - often open tags - which messes up tag pairing and display).

I ran into this bug using Smarty templating. Smarty uses ob_get_contents() to grab output from an include() of a compiled template that takes place inbetween ob_start() and ob_end_clean(). Error handling for calls inside the compiled template (which ends up being just combined php and html with multiple <?php ?> pairs) end up with junk before their proper output. 

Reproduce code:

echo 'test';
trigger_error('error', E_USER_ERROR);
$output = ob_get_contents();


Expected result:
I expect to see output from trigger_error() (or any other error php might throw) and nothing else. Non-error output should be buffered and not displayed unless requested. Error output constitutes an exception to normal processing, so should be output. 

The only other logical functioning I can see (although this would not, in my mind, be the preferred functioning) is that the code should output nothing at all, even the error output should go to the output buffer. This would be absolutely consistent for the functions, but would make it impossible to do any error handling inside a buffered section. 

Actual result:
Echo outputs 'test' and trigger_error outputs an error. 


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2007-08-19 20:00 UTC]
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at and the instructions on how to report
a bug at

 [2007-08-20 07:50 UTC]
Hint: Try changing the error to E_USER_WARNING instead.
(fatal errors stop script processing and
PHP Copyright © 2001-2015 The PHP Group
All rights reserved.
Last updated: Thu Nov 26 05:01:47 2015 UTC