小编典典

PHP“ php:// input”与$ _POST

ajax

我被指示使用该方法,php://input而不是$_POST与JQuery的Ajax请求进行交互时使用。我不了解使用vs
$_POST或全局方法的好处$_GET


阅读 274

收藏
2020-07-26

共1个答案

小编典典

原因是php://input无论内容类型如何,都将在请求的HTTP标头之后返回所有原始数据。

PHP superglobal $_POST 包装以下任一数据

  • application/x-www-form-urlencoded (用于简单表单发布的标准内容类型)或
  • multipart/form-data (主要用于文件上传)

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

因此,如果您只发布一个好的旧HTML form,则请求看起来像这样:

POST /page.php HTTP/1.1

key1=value1&key2=value2&key3=value3

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

POST /page.php HTTP/1.1

{"key1":"value1","key2":"value2","key3":"value3"}

现在的内容是application/json(或至少没有上述内容),因此PHP的$_POST-wrapper不知道该如何处理。

数据仍然在那里,您只是无法通过包装器访问它。因此,您需要使用file_get_contents('php://input')只要未multipart/form- data编码)原始格式来获取它。

这也是您访问XML数据或任何其他非标准内容类型的方式。

2020-07-26