'Twas brillig, and Leif Wickland at 03/02/09 06:02 did gyre and gimble:
I would expect that if I turn on output buffering, echo something, throw an exception, and catch the exception, nothing will have been actually output. That doesn't seem to be the case. Throwing an exception seems to defeat output buffering. In the following code, I would not expect to see the <h1>, but I do. <? try { ob_start(); echo '<h1>You should not see this!</h1>'; throw new Exception('<h2>This should be the first output.</h2>'); exit( 'Contents: ' . ob_get_clean()); } catch (Exception $ex) { exit('<h2>Exception:</h2>' . $ex->getMessage()); } I'm exercising that code on PHP 5.2.4 and 5.2.8. Does anybody know why throwing an exception seems to override ob_start(), flushing the buffered output? Is there a workaround?
This is intended behaviour and just represents the natural application flow. Exception handling in PHP does not have any concept of "output buffering" and operates in a generic way. You start output buffering but you don't explicitly turn it of or clean the contents and thus, when the script ends (inside your catch block), it will be automatically flushed (displayed).
If you don't want any output, make sure your catch block first calls ob_end_clean() before it exits.
Col -- Colin Guthrie gmane(at)colin.guthr.ie http://colin.guthr.ie/ Day Job: Tribalogic Limited [http://www.tribalogic.net/] Open Source: Mandriva Linux Contributor [http://www.mandriva.com/] PulseAudio Hacker [http://www.pulseaudio.org/] Trac Hacker [http://trac.edgewall.org/] -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php