Wickland, Leif wrote: > 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? > > Thank you, > > Leif Wickland
Others have told you why, so these will work as you want (depending upon what you want :) You can use ob_end_clean() unless you need the contents of the buffer. I assigned the return of ob_get_contents() to a var because I assume you have the exits() for testing. <? try { ob_start(); echo '<h1>You should not see this!</h1>'; $buffer = ob_get_clean(); throw new Exception('<h2>This should be the first output.</h2>'); } catch (Exception $ex) { exit('<h2>Exception:</h2>' . $ex->getMessage()); } -- or -- <? try { ob_start(); echo '<h1>You should not see this!</h1>'; throw new Exception('<h2>This should be the first output.</h2>'); } catch (Exception $ex) { $buffer = ob_get_clean(); exit('<h2>Exception:</h2>' . $ex->getMessage()); } -- Thanks! -Shawn http://www.spidean.com -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php