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

Reply via email to