Calling flush from within an output buffer prevents headers from being sent
| Bug #25701 | Calling flush from within an output buffer prevents headers from being sent | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Submitted: | 2003-09-30 09:56 UTC | Modified: | 2004-04-21 20:28 UTC |
|
||||||||||
| From: | scottmacvicar at ntlworld dot com | Assigned: | iliaa (profile) | |||||||||||
| Status: | Closed | Package: | Apache2 related | |||||||||||
| PHP Version: | 4CVS | OS: | * | |||||||||||
| Private report: | No | CVE-ID: | None | |||||||||||
[2003-09-30 09:56 UTC] 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
Patches
Pull Requests
History
AllCommentsChangesGit/SVN commits
[2003-09-30 18:47 UTC] iliaa@php.net
[2003-09-30 19:22 UTC] scottmacvicar at ntlworld dot com
[2003-10-01 10:30 UTC] 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-10-01 23:22 UTC] iliaa@php.net