$_POST与$HTTP_RAW_POST_DATA与file_get_contents(php://input)有什么区别?

15

可能是重复问题:
在PHP中,POST和RAW POST有什么区别?

为了更好地理解,如果您能解释一下$_POST$HTTP_RAW_POST_DATAfile_get_contents(php://input)之间的基本区别,我将不胜感激。

何时使用哪个以及为什么?


4
你看过手册吗?有什么特别不清楚的地方? - mario
我会查看你建议的链接,Mario。 - Michael
嗨,迈克尔,那看起来像是一道测试题的问题?是吗? - Toby Allen
正如 PeeHaa 所说,不过还要看一下 var_dump($_SERVER);,然后通过检查 CONTENT_TYPE 来查看 POST 负载的类型。 - mario
PeeHaa,谢谢!我对var dumping和一般的调试很熟悉。在这个特定的框架中,我也有Zend_Debug方法。我想要的是一个基本的理解。 - Michael
显示剩余3条评论
1个回答

28
  1. $_POST 包含以 URL 编码 (application/www-url-encoded) 的变量,这些变量通过 POST 方式发送到你的脚本中,并由 PHP 解码。当你处理 HTML 表单数据 时使用这个变量。
  2. file_get_contents("php://input") - 获取原始的 POST 数据,当你编写 API 并需要 XML/JSON/... 的输入 时,无法通过 PHP 解码为 $_POST 变量,因此需要使用该方法。
  3. $HTTP_RAW_POST_DATA - 理论上与上述方法相同,但取决于 php.ini 的配置。(已弃用,请参阅评论)

如果需要的是非 application/www-url-encoded 输入,我通常使用方法 #2 而不是 #3。


$HTTP_RAW_POST_DATA在PHP 5.6中已被弃用 - Ian Dunn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接