ID:               25175
 User updated by:  phpbug at paypc dot com
 Reported By:      phpbug at paypc dot com
 Status:           Bogus
 Bug Type:         Session related
 Operating System: Linux 2.4
 PHP Version:      4.3.2
 New Comment:

ARGH... I had just rebuilt PHP (from the snapshot) and Apache.... the
problem still exists, though Moriyoshi-san pretty much pre-confirmed it
- I should have checked back here before embarking on a web-server
rebuild.  No worries.

When I have trans_sid enabled, the discrepancy crops up again, but you
knew that.

I have not plumbed the depths of Zend and the output buffering part of
PHP, but I'm surprised that this URL rewriting occurs at a level
"higher" than that which obtaining the length of that buffer to be sent
can be determined.

I can understand the issues with the gzhandler readily enough - that's
a "final pass" process which takes the entire output and compresses it
prior to its flight to the client.

If the gzhandler breaks trans_sid (or vice-versa), then I suspect
someone make a bizarre design decision about where these various parts
need to fit together.

Transformation passes like trans_sid should be made before transport
passes (like gzhandler) and functions which determine buffer length get
at things.  

I would like to think that this is NOT a Bogus bug, but a bug whose fix
is at least in the pipeline to be addressed.  While it's easier to
understand how the gzhandler problems would be an especially hard case
to resolve, the ob_get_length() one shouldn't be.  

Or is the problem one where the URL rewriting happens while the data is
actually IN-FLIGHT to the web-browser, after a possible response from
the browser *AFTER* the header has been sent, but before the content?

If the PHP team intends to never address this as a decision of policy,
then retire this bug and place warnings into the documentation and FAQ.
 

But if you intend to resolve it, I would think it retains some value to
leave it as an open issue for future (and possibly unspecified) future
resolution.

Apollyon


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

[2003-08-22 13:48:47] [EMAIL PROTECTED]

Technically, this is not a bug. Please see the following description.

trans-sid (aka URL rewriter) utilises output buffering facility and it
virtually works as a top level output buffer handler in the hanlder
stack. Thus ob_get_length() might not reflect the actual length of the
content being sent to the user-agent because trans-sid handler
automatically rewrites all URL referrers of the tags that are specified
by url_rewriter.tags in your php.ini so they contains session
identifiers if the content includes any one of those tags. So, in any
case ob_get_length() returns the size of the intact content, on which
no URL transformation is applied yet. The same thing applies to
zlib.output_compression.

Then let me mark this PR bogus since this is not a bug in PHP. But this
behaviour is rather confusing and will be addressed in the future
versions.

BTW, how on earth did you know I'm Japanese? :)

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

[2003-08-21 19:05:53] [EMAIL PROTECTED]

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




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

[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.

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

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/25175

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

Reply via email to