php - 如何访问post变量($ _POST为空)

时间:2012-11-22 20:25:51

标签: php json post

我正在研究一个系统,目前正在尝试实现另一个(外部)系统可以发布到某些数据的脚本,以便我可以存储它们。
我无法控制外部系统 - 我可以触发它将数据发布到我的系统,给它我的脚本的URL。

当帖子发生时,看着firebug,我可以看到发布的数据,如下所示:enter image description here

或(urldecoded)

content={"sex":"male","person":{"name":["chris"],"mbox":["mailto:name.lastename@gmail.com"]}}  
&Content-Type=application/json  
&auth=DDE233H76BGN

我的问题是,当我在脚本中尝试获取这些参数时,$ _POST(和$ _REQUEST)始终为空!
我已尝试var_dump($_POST)echo file_get_contents("php://input");,但我看不到任何内容。

我在这里想念的是什么? 我不知道是否需要响应/请求标头来获取它的东西,我在这里显示它们以防万一 enter image description here

修改
我的脚本现在包含一行代码,例如:

<?php
    var_dump($_POST);
?>

<?php
   echo file_get_contents("php://input");
?>

他们两个都绝对没有给我:s

3 个答案:

答案 0 :(得分:1)

应使用$arr= json_decode($_POST['content']);访问数据...但此处还有其他问题。

缺少详细信息:

... firebug如何能够向您显示从外部系统发送到您网站的$ _POST的内容(也就是说:请求不通过您的浏览器,但可能是通过来自外部的CURL请求)服务器)。显然,我在这里得不到什么。

我看到的是您的浏览器发送的POST请求(在javascript中),由您的网站制作。 你的问题错过了一个重要的细节,我只是不确定它是什么。

<强>提示:

尝试在你的var_dump之前放一个echo 'test';,我觉得你可能没有调试我们在Firebug中看到的Ajax POST请求真正调用的页面。一点路由问题?

答案 1 :(得分:0)

让我们看看RFC 1945,看看“参数”是什么

parameter      = attribute "=" value
attribute      = token
token          = 1*<any CHAR except CTLs or tspecials>
CTL            = <any US-ASCII control character
                    (octets 0 - 31) and DEL (127)>

所以我认为“Content-Type = application / json”不是POST的有效部分,因为“ - ”不是CTL

答案 2 :(得分:0)

您应该尝试查看原始POST数据变量:

echo $HTTP_RAW_POST_DATA;