PHP“ php:// input”与$ _POST
我被指示使用该方法,php://input
而不是$_POST
与JQuery的Ajax请求进行交互时使用。我不了解使用此方法与$_POST
or
的全局方法的好处$_GET
。
回答:
原因是php://input
无论内容类型如何,都将在请求的HTTP标头之后返回所有原始数据。
PHP superglobal $_POST
仅 应 包装以下任一数据
application/x-www-form-urlencoded
(用于简单表单发布的标准内容类型)或multipart/form-data
(主要用于文件上传)
这是因为这些是用户代理 _必须_支持的唯一内容类型。因此,服务器和PHP传统上不希望接收任何其他内容类型(这并不意味着它们不能)。
因此,如果您只发布一个好的旧HTML form
,则请求看起来像这样:
POST /page.php HTTP/1.1key1=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数据或任何其他非标准内容类型的方式。
以上是 PHP“ php:// input”与$ _POST 的全部内容, 来源链接: utcz.com/qa/425447.html