ID:               25175
 Updated by:       [EMAIL PROTECTED]
 Reported By:      phpbug at paypc dot com
-Status:           Open
+Status:           Feedback
 Bug Type:         Session related
 Operating System: Linux 2.4
 PHP Version:      4.3.2
 New Comment:

Please try using this CVS snapshot:

  http://snaps.php.net/php4-STABLE-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php4-win32-STABLE-latest.zip





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

[2003-08-21 04:33:50] phpbug at paypc dot com

*ARGH* I hate "thinkoes" -- it should be obvious from context (and
perusing my phpconfig) that I've TURNED OFF enable_trans_sid, not
turned it on.

Upon re-reading my posting (naturally AFTER I'd hit submit), I noted
the think-o.

My apologies.  

=Apollyon=

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

[2003-08-21 04:31:10] phpbug at paypc dot com

OK, let me put forth some declarations so we're talking apples and
apples.

My test method:

echo -e "GET /legal/tester.php HTTP/1.1\r\nHost: 127.0.0.1\r\n" | nc
127.0.0.1 80 > dump

I wish to eliminate any possible "post-processing" or
browser-variations.

IE: "nc" is netcat, a commonly available network tool.

OK, onto the results of my tests.

I copied and pasted sniper's code *EXACTLY* as presented, with
whitespaces and line spacing as entered.  I obtained identical results
with both lynx and my netcat method, though lynx probably doesn't
support HTTP/1.1 because there was an additional header.

With Lynx Version 2.8.3rel.1:

HTTP/1.1 200 OK
Date: Thu, 21 Aug 2003 09:10:16 GMT
Server: Apache/1.3.27 Ben-SSL/1.48
Connection-Type: Keep-Alive
Content-Length: 4
Connection: close   <<<<<<<<<<<<< Additional header
Content-Type: text/html

With netcat:

HTTP/1.1 200 OK
Date: Thu, 21 Aug 2003 09:10:55 GMT
Server: Apache/1.3.27 Ben-SSL/1.48
Connection-Type: Keep-Alive
Content-Length: 4
Content-Type: text/html

In comparing the actual bytes sent over the wire against the advertised
content-length, the Content-Length header is correct.

If you wish to inspect my PHP build and setup configuration, you may do
so at: <http://hollywood.paypc.com/config4phpbugmasters>

(I will be removing this after 24 hours.)

And yes, it's pretty loaded.  And yes, trans_sid is enabled, but in all
of my test harnesses which employ sessions, I've enabled cookies - and
they are created/used by the browsers involved.

******* AHHHHHHAAAA *******

Arigatoo gozaimashita to Moriyoshi-san for cautioning me to turn on
trans_sid, because when I disable it in my global php.ini, the
discrepancy disappears!

For my "complex" web-application which formerly reported bad sizing, I
received the following header (after turning off trans_sid):

----------------------------
HTTP/1.1 200 OK
Date: Thu, 21 Aug 2003 09:20:47 GMT
Server: Apache/1.3.27 Ben-SSL/1.48
Cache-Control: no-store, no-cache, must-revalidate, post-check=0,
pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=a1c8bfb3f409580e57206d7c19eac473; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Content-Length: 2825
Content-Type: text/html
--------------------------------

And doing a wc -c on the content-portion matches this size exactly
(with my netcat test).

Third-party validation via usage of
<http://www.ircache.net/cgi-bin/cacheability.py> confirms an exact
match of advertised Content-Length and what's actually received.

And lastly, and most importantly, the IE "hang" bug while accessing
this web application via an intranet is gone.

OK, fine, trans_sid broke it.  Why?  And should it have?  I'm
suspicious that the Esteemed Moriyoshi-san nailed this specific setting
in advance, as if to suspect it being a potential cause for buggage.

Inquiring minds want to know - if it's by design, please add it to the
documentation and FAQ.  I know alot of things about the ob_ functions
are unusual and cause some people hardship (of their own making).  This
one came out of left field.

=Apollyon=

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

[2003-08-21 00:10:00] [EMAIL PROTECTED]

> Set-Cookie: PHPSESSID=2989258979bd07405999448563ef4bfc; path=/

Perhaps you seem to have enabled session.use_trans_sid.
If so, first turn it off before trying the above script provided by
sniper.

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

[2003-08-20 22:54:00] [EMAIL PROTECTED]

try this script:

<?php ob_start(); ?>
foo
<?php

header("Connection-Type: Keep-Alive");
header('Content-Length: ' . ob_get_length());
ob_end_flush();
echo ob_get_length();

?>

And access it with this command:

# lynx -head lynx -dump -head http://localhost/test.php

I get this (correct) output:

HTTP/1.1 200 OK
Date: Thu, 21 Aug 2003 03:52:44 GMT
Server: Apache/1.3.27 (Unix) PHP/4.3.3RC5-dev
X-Powered-By: PHP/4.3.3RC5-dev
Connection-Type: Keep-Alive
Content-Length: 4
Connection: close
Content-Type: text/html



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

[2003-08-20 07:05:31] phpbug at paypc dot com

Description:
------------
Very straightforward.

I have a preamble and postamble include on ALL of my main .php pages...
which use ADODB session management, some PEAR, and other typical
dynaweb goodies.

The Content-Length header is *ALWAYS* off by about 81 bytes, as in, the
ob_get_length() is always smaller than the actual size of the content
sent...

I've verified this with "netcat" - after trimming the headers from the
reply, the content is 81 bytes larger than advertised in the
Content-Length header.

I observed no change in behaviour after adding the ob_clean() call into
my header file.

OTHERWISE, things work fine.

What's the deal?  Is Apache silently adding CRLF's?

I am NOT using the gzhandler or transparent compression here.  This is
just straightforward output.

=Lord Apollyon=


Reproduce code:
---------------
The code for all of my index.php's consist of the following:

<?PHP
include_once 'db_header.inc';
................
include_once 'db_footer.inc';
?>

db_header.inc:

<?php
$start_time=gettimeofday();
ob_clean();   // paranoid and desperate
ob_start();
header("Connection-Type: Keep-Alive");
?>

db_footer.inc contains:

<?PHP
if ($LOGGING) 
{
    $LOG->close();
        $LOGGING=FALSE;
}
header('Content-Length: ' . ob_get_length());
ob_end_flush();
?>

Note: there are no blank lines at the beginning of my *.inc or *.php
files.

Expected result:
----------------
I would expect Content-Length to reflect the actual output size.




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


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

Reply via email to