Bug #51592 [Tbd->Csd]: file_get_contents('php://input') - empty string if called more than once
| From: | degeberg@php.net | Date: | Mon, 31 May 2010 14:37:48 +0000 |
| Subject: | Bug #51592 [Tbd->Csd]: file_get_contents('php://input') - empty string if called more than once | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-150966@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=51592&edit=1
ID: 51592
Updated by: degeberg@php.net
Reported by: theshop at inbox dot ru
Summary: file_get_contents('php://input') - empty string if
called more than once
-Status: To be documented
+Status: Closed
Type: Bug
Package: Streams related
Operating System: any
PHP Version: 5.3.2
-Assigned To:
+Assigned To: degeberg
New Comment:
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.
Thank you for the report, and for helping us make our documentation
better.
Previous Comments:
------------------------------------------------------------------------
[2010-05-31 16:37:41] degeberg@php.net
Automatic comment from SVN on behalf of degeberg
Revision: http://svn.php.net/viewvc/?view=revision&revision=299993
Log: Fixed PHP bug #51592 (file_get_contents('php://input') - empty
string if called more than once)
------------------------------------------------------------------------
[2010-05-31 15:12:18] mike@php.net
Reclassified.
php://input can only be read once.
------------------------------------------------------------------------
[2010-05-14 14:12:23] theshop at inbox dot ru
Nope, I was wrong, does not work under CentOS with methods different
from GET or POST. So it is not OS specific after all.
------------------------------------------------------------------------
[2010-05-14 13:55:50] theshop at inbox dot ru
Some more test results:
Windows 7 Pro x64, Apache 2.2.15, PHP 5.3.2 - not working.
CentOS (don't know exact version number), Apache 2.2.3, PHP 5.3.2 -
works correctly.
So this is probably Windows-only bug.
------------------------------------------------------------------------
[2010-04-18 23:04:16] theshop at inbox dot ru
Description:
------------
Second and consecutive calls of file_get_contents('php://input') return
empty string if client issued an HTTP command other than 'GET' or 'POST'
(see example code). If 'GET' or 'POST' HTTP command was issued
file_get_contents('php://input') works correctly.
Not sure if this is cURL related bug, maybe some other PHP package is
responsible.
I am using Apache 2.2 and IE8.
Test script:
---------------
#bug_curl.php
$hcurl = curl_init();
curl_setopt($hcurl, CURLOPT_URL, 'http://test/bug.php');
curl_setopt($hcurl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($hcurl, CURLOPT_HTTPHEADER, array('Content-Type:
text/plain'));
curl_setopt($hcurl, CURLOPT_POSTFIELDS, 'some request text');
curl_setopt($hcurl, CURLOPT_CUSTOMREQUEST, 'DELETE');
//curl_setopt($hcurl, CURLOPT_HTTPGET, true); - this works ok
//curl_setopt($hcurl, CURLOPT_POST, true); - this works ok
$out = curl_exec($hcurl);
curl_close($hcurl);
echo '<pre>'.htmlspecialchars($out).'</pre>';
# bug.php
var_dump(file_get_contents('php://input'));
var_dump(file_get_contents('php://input')); // returns empty string if
HTTP command is not 'GET' or POST'
var_dump(apache_request_headers());
Expected result:
----------------
string(17) "some request text"
string(17) "some request text"
array(4) {
["Host"]=>
string(4) "test"
["Accept"]=>
string(3) "*/*"
["Content-Type"]=>
string(10) "text/plain"
["Content-Length"]=>
string(2) "17"
}
Actual result:
--------------
string(17) "some request text"
string(0) ""
array(4) {
["Host"]=>
string(4) "test"
["Accept"]=>
string(3) "*/*"
["Content-Type"]=>
string(10) "text/plain"
["Content-Length"]=>
string(2) "17"
}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=51592&edit=1