魏长东

weichangdong

php接收post的json数据

今天听一个合作方说POST接收我的数据是这样的格式:{\"kkUid\":\"92262910779941090\",\"serverId\":\"4004999\"},就是双引号都被转义了,如是我就自己亲自试了下。

a.php文件

<?php
$data = array(
                    'kkUid' => 1,
                    'serverId' => 2,
                    'itemId' => 3,
                    'itemNum' => 4,
                    'roleId' => 5,
                );
$sendGiftUrl= 'localhost/post/b.php';
if (11>21) {
//方式1
	$passData =  http_build_query($data);
	$contentType = 'Content-Type: application/x-www-form-urlencoded';
} else {
//方式2
	$passData = json_encode($data);
	$contentType = 'Content-Type: application/json';
}
$ch = curl_init($sendGiftUrl);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $passData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($contentType,
		'Content-Length: ' . strlen($passData)));
$re = curl_exec($ch);
var_dump($re);

b.php文件代码

<?php
$value=file_get_contents('php://input', 'r');
//$value=$_POST;//request
//$value=$GLOBALS['HTTP_RAW_POST_DATA'];
print_r($value);

最后得出的结论是:

不管用方式1,还是方式2,用php://input都可以接收到数据,而且没有被转义。

但是接收数据要是用$_POST,或者$_REQUEST,就只能用方式1,用方式2是不会收到数据的。

无论方式1还是方式2,用$GLOBALS['HTTP_RAW_POST_DATA']都是收不到数据的!!!