我正在使用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
发送?
答案 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指令。