为了账号安全,请及时绑定邮箱和手机立即绑定

PHP“php:/Input”vs$POST

PHP“php:/Input”vs$POST

PHP
繁星点点滴滴 2019-06-17 15:20:29
PHP“php:/Input”vs$POST我已被指示使用这种方法。php://input而不是$_POST当与来自JQuery的Ajax请求交互时。我不明白的是,与全局方法相比,使用这个方法有什么好处?$_POST或$_GET.
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

原因是php://input返回请求的HTTP-Header之后的所有原始数据,而不管内容类型如何。

PHP超全局$_POST,只有应该是包装数据

  • application/x-www-form-urlencoded

    (简单表格-POST的标准内容类型)或
  • multipart/form-data-encoded

    (主要用于文件上传)

这是因为这些是唯一的内容类型由用户代理支持..因此,服务器和PHP传统上不会接收任何其他内容类型(这并不意味着它们不能接收)。

所以,如果您只是简单地发布一个好的旧HTMLform,请求如下所示:

POST /page.php HTTP/1.1key1=value1&key2=value2&key3=value3

但是,如果您经常使用Ajax,这种可能性还包括使用类型(String、int、bool)和结构(数组、对象)交换更复杂的数据,因此在大多数情况下,JSON是最好的选择。但是带有JSON有效负载的请求如下所示:

POST /page.php HTTP/1.1{"key1":"value1","key2":"value2","key3":"value3"}

现在的内容应该是application/json(或者至少上面没有提到),所以PHP的$_POST-包装器不知道如何处理(目前)。

数据仍然存在,您只是不能通过包装器访问它。因此,您需要自己以原始格式获取file_get_contents('php://input') (只要不是multipart/form-data-编码).

这也是如何访问XML-数据或任何其他非标准内容类型。


查看完整回答
反对 回复 2019-06-17
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

如果POST数据格式错误,$_POST将不包含任何内容。然而,php:/put将有格式错误的字符串。

例如,有一些Ajax应用程序,它们没有为上传文件形成正确的POST键值序列,而只是将所有文件转储为POST数据,而没有变量名称或任何内容。$_POST将为空,$_files也为空,而php:/INPUT将包含确切的文件,以字符串形式编写。


查看完整回答
反对 回复 2019-06-17
  • 3 回答
  • 0 关注
  • 574 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信