Edit report at https://bugs.php.net/bug.php?id=23222&edit=1

 ID:                 23222
 Updated by:         m...@php.net
 Reported by:        nospam at 1111-internet dot com
 Summary:            Allow controlling header flushing with output
                     buffering
-Status:             Open
+Status:             Wont fix
 Type:               Feature/Change Request
 Package:            Zlib related
 Operating System:   *
 PHP Version:        *
-Assigned To:        
+Assigned To:        mike
 Block user comment: N
 Private report:     N



Previous Comments:
------------------------------------------------------------------------
[2003-04-15 20:10:25] il...@php.net

As previously indicated by ed...@php.net this is not a bug, but rather a 
feature resultant from automatic output buffering when compression is enabled. 
Therefor the bug status is being changed accordingly.

------------------------------------------------------------------------
[2003-04-15 09:28:31] nospam at 1111-internet dot com

I could see how that could be considered a "feature" to some, but for the 
reasons I've already stated I see it only as an unwanted and undesirable side 
effect.

I request that another feature be added that allows one to override this 
default behavior, i.e.:

zlib.output_compression = On
zlib.header_flush = On

which would cause the output buffer to flush immediately before each header() 
is executed.

Thanks...

------------------------------------------------------------------------
[2003-04-15 06:05:24] ed...@php.net

This is not a bug, but a feature of PHP's output buffering. Whenever you have 
any sort of output buffering enabled header() function will work until the 
buffers are flushed to the output.

------------------------------------------------------------------------
[2003-04-15 03:13:47] nospam at 1111-internet dot com

Consider the following code:

<?php
echo str_repeat("x", 4095);
header("Location: /somewhere_else.php");
exit;
?>

If zlib.output_compression is off, this will cause 4095 "x"s to display, 
properly followed by an error on the header line.

If zlib.output_compression is on, however, the echo line will execute - but 
nothing is output immediately because it fails to fill the compression buffer - 
so the header line goes ahead and executes and redirects successfully, 
completely spurning the output.

Granted, nobody would use this particular example in a real world application - 
I just set it up to illustrate the problem. I have run into real situations, 
though, where I'm doing diagnostics or inadvertently cause an error on code 
lines that logically precede a header("Location:... call. This problem prevents 
my diagnistic or error messages from showing up. Consider:

<?php
// set up mysql connection and
mysql_query("insert into mytable (myfield) values (". $_GET["myvalue"]. ")");

// no problem if $_GET["myvalue"] is a number,
// but if it's a non-numeric string like "abc" that line will generate an error 
message
// which I would like to see so I can fix the problem...

// but the error message doesn't fill the compression buffer
// so the following redirect happens and usurps the error message
header("Location: /somewhere_else.php");
exit;

// so I go on as though there was never a problem
// until I look at my still-empty database table some time later...
?>


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



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

Reply via email to