$ _POST在php中为空

问题描述:

我已经历了this post的所有回应
print_r($ _ POST); ===>返回空数组
print_r($ _ SERVER);

Array ([HTTP_HOST] => localhost 
     [HTTP_ACCEPT] => */* 
     **[HTTP__CONTENT_TYPE]** => application/json; charset=UTF-8" 
     [CONTENT_LENGTH] => 942 
     **[CONTENT_TYPE]** => application/x-www-form-urlencoded 
     [PATH] => /usr/local/bin:/usr/bin:/bin 
     [SERVER_SIGNATURE] => Apache/2.2.14 (Ubuntu) Server at localhost Port 80 
     [SERVER_SOFTWARE] => Apache/2.2.14 (Ubuntu) 
     [SERVER_NAME] => localhost 
     [SERVER_ADDR] => 127.0.0.1 
     [SERVER_PORT] => 80 
     [REMOTE_ADDR] => 127.0.0.1 
     [DOCUMENT_ROOT] => /var/www 
     [SERVER_ADMIN] => [email protected] 
     [SCRIPT_FILENAME] => /var/www/slocation.php 
     [REMOTE_PORT] => 50657 
     [GATEWAY_INTERFACE] => CGI/1.1 
     [SERVER_PROTOCOL] => HTTP/1.1 
     [REQUEST_METHOD] => POST 
     [QUERY_STRING] => 
     [REQUEST_URI] => /slocation.php 
     [SCRIPT_NAME] => /slocation.php 
     [PHP_SELF] => /slocation.php 
     [REQUEST_TIME] => 1288466907 
    ) 

HTTP__CONTENT_TYPE和CONTENT_TYPE有什么区别?

print_r($ HTTP_RAW_POST_DATA); ==>返回正确的数据
file_get_contents('php:// input'); ======>返回正确的数据。

只有$ _POST失败。

这是我的curl命令

$url = "http://localhost/slocation.php"; 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('"Content-type: application/json; charset=UTF-8"')); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); 
$result = curl_exec($ch); 

UPDATE ::::::::::::::::::::::::::::::::: :::::::::::::::::
我发现了一个主here

+0

'$ payload'包含什么? – 2010-10-30 19:47:15

+0

更重要的是,你期望'$ _POST'包含什么? – 2010-10-30 19:48:03

+0

嘿Pekka! $ payload包含一个json字符串。但我尝试将一个简单的“hello”作为POST数据和“text/html”作为Content-Type标头传递。但$ _POST总是空的。我希望$ _POST具有与我传入的数据相同的数据。 $ _POST = $ HTTP_RAW_POST_DATA = file_get_contents('php:// input'); – 2010-10-30 19:54:44

要回答我的问题,“什么是之间HTTP__CONTENT_TYPE和CONTENT_TYPE区别?”
如果您看到“HTTP__CONTENT_TYPE”,这很可能意味着您在设置CONTENT-TYPE标题字段时犯了错误。当curl无法识别有效的CONTENT_TYPE值时,可能会将错误的值设置为HTTP__CONTENT_TYPE,并且CONTENT_TYPE采用默认值。