ID:               25701
 Comment by:       brion at pobox dot com
 Reported By:      scottmacvicar at ntlworld dot com
 Status:           Closed
 Bug Type:         Apache2 related
 Operating System: *
 PHP Version:      4CVS
 Assigned To:      iliaa
 New Comment:

While this seems to be fixed when using --with-apxs2, 
the bug still occurs in 4.3.4 using --with-apxs2filter.

headers_sent() returns false, no warning or error 
message occurs when trying to use header(), just the 
headers silently vanish.


Previous Comments:
------------------------------------------------------------------------

[2003-10-01 23:22:07] [EMAIL PROTECTED]

This bug has been fixed in CVS.

In case this was a PHP problem, snapshots of the sources are packaged
every three hours; this change will be in the next snapshot. You can
grab the snapshot at http://snaps.php.net/.
 
In case this was a documentation problem, the fix will show up soon at
http://www.php.net/manual/.

In case this was a PHP.net website problem, the change will show
up on the PHP.net site and on the mirror sites in short time.
 
Thank you for the report, and for helping us make PHP better.



------------------------------------------------------------------------

[2003-10-01 10:30:57] scottmacvicar at ntlworld dot com

<?php

ob_start();

echo 'test';
flush();

$newtext = ob_get_clean();

if (!headers_sent())
{
        echo 'in here<br />';
}

echo $newtext;

?>

Based on what you've said above then you shouldn't see 'in here' within
Apache 2.

------------------------------------------------------------------------

[2003-09-30 19:22:16] scottmacvicar at ntlworld dot com

Shouldn't headers_sent() return true then?

------------------------------------------------------------------------

[2003-09-30 18:47:05] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

Unlike Apache 1, when Apache 2 recieves a directive to flush it does so
right away sending any pending headers in the process. Since the
headers & text were already sent it cannot send the header indicating
the data that follows in gziped. Due to the missing header you get a
whole bunch of binary data.

------------------------------------------------------------------------

[2003-09-30 09:56:26] scottmacvicar at ntlworld dot com

Description:
------------
Calling flush in Apache and Apache 2 produce different results.

Within Apache after calling flush you can still send headers as the
output buffer prevents it from actually being flushed.

Within Apache 2 after calling flush you can no longer send headers even
though headers_sent still returns false.


Reproduce code:
---------------
<?php

ob_start();

echo 'test';
flush();

$newtext = ob_get_clean();

if (strpos(' ' . $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false
AND !headers_sent())
{
        header('Content-Encoding: gzip');
        $newtext = gzencode($newtext, 1);
}

header('Content-Length: ' . strlen($newtext));
echo $newtext;

?>

Expected result:
----------------
test

Actual result:
--------------
binary data


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=25701&edit=1

Reply via email to