0

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

我正在使用 Facebook 实时更新 API 来订阅更改。文档状态:

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

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

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

我一遍又一遍地尝试访问POSTed data use $_POST,它总是空的。在谷歌上搜索了一段时间后,我发现这篇博客文章包含这条神奇的线路:$post_body = file_get_contents('php://input');.

我以前从未见过php://input……这是什么?它有什么作用?Facebook 在做什么来创建我认为是其中包含 JSON 字符串的文件?他们为什么要这样做而不是通过发送$_POST

4

2 回答 2

2

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

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

这就是为什么您需要手动读取和解析它的原因。

于 2012-11-07T23:10:03.410 回答
0

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

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

于 2012-11-07T23:10:42.503 回答