Re: Throwing an exception seems to defeat output buffering

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



'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


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux