Re: Throwing an exception seems to defeat output buffering
| From: | Colin Guthrie | Date: | Tue, 03 Feb 2009 09:32:58 +0000 |
| Subject: | Re: Throwing an exception seems to defeat output buffering | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-287562@lists.php.net to get a copy of this message | ||
'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 {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/]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?