PHP“php:/Input”vs$POST

PHP“php:/Input”vs$POST

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


繁星点点滴滴
浏览 575回答 3
3回答

慕尼黑的夜晚无繁华

原因是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-数据或任何其他非标准内容类型。

鸿蒙传说

如果POST数据格式错误,$_POST将不包含任何内容。然而,php:/put将有格式错误的字符串。例如,有一些Ajax应用程序,它们没有为上传文件形成正确的POST键值序列,而只是将所有文件转储为POST数据,而没有变量名称或任何内容。$_POST将为空,$_files也为空,而php:/INPUT将包含确切的文件,以字符串形式编写。
打开App,查看更多内容
随时随地看视频慕课网APP