ID:               42334
 Updated by:       [EMAIL PROTECTED]
 Reported By:      ahaig at penguinmililtia dot net
 Status:           Bogus
 Bug Type:         Output Control
 Operating System: Mac OS X 10.4.10
 PHP Version:      5.2.3
 New Comment:

Hint: Try changing the error to E_USER_WARNING instead.
(fatal errors stop script processing and are..eh..FATAL..:)


Previous Comments:
------------------------------------------------------------------------

[2007-08-19 20:00:46] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php



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

[2007-08-18 01:49:23] ahaig at penguinmililtia dot net

Description:
------------
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:
---------------
<?php

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

?>

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. 


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


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

Reply via email to