如何在php中获取POST的主体?
我作为POST提交到php页面以下内容:
{a:1}
这是请求的正文(POST 请求)。
在php中,我必须做些什么来提取该值?
var_dump($_POST);
不是解决方案,不起作用。
我作为POST提交到php页面以下内容:
{a:1}
这是请求的正文(POST 请求)。
在php中,我必须做些什么来提取该值?
var_dump($_POST);
不是解决方案,不起作用。
要访问 POST 或 PUT 请求(或任何其他 HTTP 方法)的实体正文,请执行以下操作:
$entityBody = file_get_contents('php://input');
此外,常量是 已经打开的流,因此您可以执行以下操作:STDIN
php://input
$entityBody = stream_get_contents(STDIN);
php://input 是一个只读流,允许您从请求正文中读取原始数据。在POST请求的情况下,最好使用 php://input 而不是因为它不依赖于特殊的php.ini指令。此外,对于默认情况下未填充的情况,它是激活always_populate_raw_post_data的内存密集程度较低的替代方法。php://input 不适用于 enctype=“multipart/form-data”。
$HTTP_RAW_POST_DATA
$HTTP_RAW_POST_DATA
具体来说,您需要注意,无论您如何在 Web SAPI 中访问流,该流都是不可寻道的。这意味着它只能读取一次。如果您在例行上传大型 HTTP 实体正文的环境中工作,您可能希望以流形式维护输入(而不是像上面的第一个示例那样缓冲它)。php://input
要维护流资源,如下所示可能会有所帮助:
<?php
function detectRequestBody() {
$rawInput = fopen('php://input', 'r');
$tempStream = fopen('php://temp', 'r+');
stream_copy_to_stream($rawInput, $tempStream);
rewind($tempStream);
return $tempStream;
}
php://temp
允许您管理内存消耗,因为它将在存储一定数量的数据(默认为2M)后透明地切换到文件系统存储。此大小可以在 php.ini 文件中操作,也可以通过附加 ,其中 是使用临时文件之前要保留在内存中的最大数据量(以字节为单位)。/maxmemory:NN
NN
当然,除非您有充分的理由在输入流上进行搜索,否则在 Web 应用程序中不需要此功能。读取一次 HTTP 请求实体正文通常就足够了 - 不要让客户端整天等待,而你的应用会弄清楚该怎么做。
请注意,php://input 不适用于指定标头(在 HTML 表单中)的请求。这是因为 PHP 已经将表单数据解析为超全局。Content-Type: multipart/form-data
enctype="multipart/form-data"
$_POST
数组中的返回值
$data = json_decode(file_get_contents('php://input'), true);