Bug #60465 [ReO->Dup]: file_get_contents doesn't stop retrieving data
| From: | cmb@php.net | Date: | Wed, 29 Sep 2021 10:26:48 +0000 |
| Subject: | Bug #60465 [ReO->Dup]: file_get_contents doesn't stop retrieving data | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-236914@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=60465&edit=1
ID: 60465
Updated by: cmb@php.net
Reported by: dbc334 at gmail dot com
Summary: file_get_contents doesn't stop retrieving data
-Status: Re-Opened
+Status: Duplicate
Type: Bug
Package: HTTP related
Operating System: Windows
PHP Version: 5.3.8
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
I'm closing this as duplicate of bug #80931.
Previous Comments:
------------------------------------------------------------------------
[2021-07-20 12:56:48] cmb@php.net
The problem is that the HTTP stream wrappers ignore the
Content-Length and just read until the stream is EOL. As such, it
is the same root cause as bug #80931.
------------------------------------------------------------------------
[2014-07-26 12:36:50] dbc334 at gmail dot com
If you move ob_status() three lines downwards (so it's before ob_end_flush()), you will get
warning because headers were sent after some content was flushed (this happens when output_buffering
is off, which is PHP's default setting).
If you change the value of Content-Length from 1 to 2, browsers will display "12" (which
is expected).
Even simpler test script:
<?php
header("Content-Length: 1");
print '12';
flush();
?>
I have run this and original test script on several servers from the browser. They gave the same
results as follows:
Displayed "1" on the following configurations:
PHP 5.3.3 with Apache 2.2.15 (CentOS)
PHP 5.3.23 with Apache (unknown version, unknown linux)
PHP 5.3.28 with Apache (unknown version, unknown linux)
PHP 5.4.17 with Apache 2.2.3 (CentOS)
PHP 5.5.11 with Apache 2.4.9 (Win32)
PHP 5.5.15 with Apache 2.4.10 (Win32)
But it displayed "12" on the following configuration:
PHP 5.2.17 with Apache (unknown version, unknown linux)
(request returned header Content-Length with the value 2 instead of 1)
(I monitored all requests with Fiddler and in all requests browsers got "12" in the body
of the request.)
Also: if you remove flush(), the value of Content-Length header changes from 1 to 2 and browsers
display "12".
------------------------------------------------------------------------
[2014-07-26 05:17:21] cfowler at microsoft dot com
It seems that if you make a call to ob_status() before ob_end_flush() the expected result occurs
(the remainder of the script goes unexecuted).
------------------------------------------------------------------------
[2014-07-13 10:40:06] dbc334 at gmail dot com
This still doesn't work as it should on 5.5.14 (Windows).
------------------------------------------------------------------------
[2014-07-13 01:52:56] yohgaki@php.net
Oops. This bug report is for infinite read.
Anyway, 5.4 and 5.5 finish reading it.
Closing bug.
------------------------------------------------------------------------
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
https://bugs.php.net/bug.php?id=60465
--
Edit this bug report at https://bugs.php.net/bug.php?id=60465&edit=1