2013-07-01 119 views
5

我使用file_get_contents('php://input')检索所有POST参数/从一个特定的网络服务,例如值:解析结果(“PHP://输入”)

$postText = file_get_contents('php://input'); 

导致这样的事情:

inReplyToId=MG1133&to=61477751386&body=test&from=61477751386&messageId=166594397&rateCode= 

然后我需要得到每个单独的键/值对的,因为我需要将它们安置在一个新的数据库记录的字段。例如,我想结束:

$inReplyToId = MG1133 
$to = 61477751386 
$body = test 

一旦我知道了个人价值,我可以在数据库中设置相应的字段。我通常会使用:

if(isset($_POST['inReplyToId']) && $_POST['inReplyToId'] !== '') { 
    $request->setField('_kf_GatewayMessageID', $_POST['inReplyToId']); 
} 

但因为它不是正被提交application/x-www-form-urlencoded形式,将不会在这种情况下工作。

+2

['parse_str()'](http://ch2.php.net/manual/en/function.parse-str.php) – str

+1

http://www.php.net/manual/ en/function.parse-str.php – CBroe

+0

为什么使用'file_get_contents'和'php:// input'?在'INPUT_POST'或'serialize($ _ POST)'上使用[数据过滤器](http://www.php.net/manual/en/book.filter.php)会更好吗?有什么区别? –

回答

5

可以使用parse_str函数来分析查询字符串:

$queryString = 'inReplyToId=MG1133&to=61477751386&body=test&from=61477751386&messageId=166594397&rateCode='; 
$data = array(); 
parse_str($queryString, $data); 
var_dump($data); 

Demo

编辑:

比如我想结束:

$inReplyToId = MG1133 
$to = 61477751386 
$body = test 

要获得数组键作为变量,你可以使用extract

extract($data); 

Demo

编辑2:如果你已经有一个使用$_POST与相应的指标,你可以合并数据变量的代码它:

但修改这些变量我这是不可取的。

1

查看将参数化字符串转换为关联数组的parse_str()函数。

0

您可以使用此代码!尝试!

<?php 
$postdata = file_get_contents("php://input"); 
//$postdata = '{"mail": "[email protected]", "number": 6969 }'; 

$obj = json_decode($postdata); 
echo $obj->{'mail'}; // [email protected] 

?>