PHP "php://input"与 $_POST

标签 php ajax input

在与来自 JQuery 的 Ajax 请求交互时,我被指示使用方法 php://input 而不是 $_POST。我不明白的是使用这个与 $_POST$_GET 的全局方法相比的好处。

最佳答案

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

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

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

这是因为只有这些内容类型 must be supported by user agents .所以服务器和 PHP 传统上不期望接收任何其他内容类型(这并不意味着它们不能)。

所以,如果你只是简单地 POST 一个好的旧 HTML form,请求看起来像这样:

POST /page.php HTTP/1.1

key1=value1&key2=value2&key3=value3

但如果您经常使用 Ajax,这可能还包括使用类型(字符串、int、bool)和结构(数组、对象)交换更复杂的数据,因此在大多数情况下 JSON 是最佳选择。但是带有 JSON 有效负载的请求看起来像这样:

POST /page.php HTTP/1.1

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

内容现在将是 application/json (或者至少不是上面提到的),所以 PHP 的 $_POST-wrapper 不知道如何处理它(然而)。

数据仍然存在,只是无法通过包装器访问它。因此,您需要使用 file_get_contents('php://input') ( as long as it's not multipart/form-data-encoded ) 以原始格式自己获取它。

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

关于PHP "php://input"与 $_POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893574/

相关文章:

php - 在 while 循环之外访问变量

php - 为什么我的简单 ajax 代码不起作用?

html - 是否可以仅使用 CSS 动态设置输入元素的宽度?

java - 使用图形从用户那里获取输入

java - 用户输入Java

php - 简单地尝试更新 mysql 数据库中的项目

php - 如何在 linux 主机中运行 php 套接字服务器

javascript - 防止在时间范围内对同一 url 进行多次 AJAX 调用

javascript - 如何使用phpexcel和ajax导入excel文件?

javascript - 如何从ajax函数给js变量赋值(PHP)