使用file_get_contents访问POST数据

时间:2012-11-07 23:07:51

标签: php post

  

可能重复:
  PHP php://input vs $_POST

我正在使用Facebook Real-time updates API来订阅更改。文档声明:

  

成功订阅后,每次有所变更(对所选字段或连接)时,Facebook都会继续调用您的端点。对于每次更新,它都会发出HTTP POST请求。

     

请求的内容类型为application/json,正文将包含一个包含一个或多个更改的JSON编码字符串。

https://developers.facebook.com/docs/reference/api/realtime/

我一遍又一遍地试图访问POST ed数据使用$_POST,它始终为空。谷歌搜索了一段时间后,我发现这个blog post包含了这条神奇的线:$post_body = file_get_contents('php://input');

我以前从未见过php://input ......这是什么?它有什么作用?什么是Facebook在他们身边创建我认为是一个带有JSON字符串的文件?他们为什么要这样做而不是通过$_POST发送?

2 个答案:

答案 0 :(得分:2)

php://input是原始输入主体的流包装器。它由php自动解析,因此您可以在代码中获得$_POST。如果没有 - 这意味着它是一种意想不到的格式。

在facebook的情况下 - 他们只发送一个json字符串,这不是PHP解释器所期望的那样(它希望它是key=val&key2=val&...字符串,而是获得{key: "val",...}

这就是你需要手动阅读和解析它的原因。

答案 1 :(得分:0)

php:// input是一个只读流,允许您从请求正文中读取原始数据。在POST请求的情况下,最好使用php:// input而不是$ HTTP_RAW_POST_DATA,因为它不依赖于特殊的php.ini指令。

参考 http://php.net/manual/en/wrappers.php.php