Edit report at http://bugs.php.net/bug.php?id=51592&edit=1
ID: 51592 Updated by: degeb...@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] degeb...@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] m...@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