POST请求中php://input为空

3

由于使用 multipart/form-data 出现问题,我不得不像处理PUT请求一样手动解析POST请求的参数。 为此,我使用了以下代码:

$rawData = file_get_contents('php://input');

我发现php://input对于POST请求总是为空的,至少对于php-fpm SAPI。

下面是调试器中的一些图片。POST请求:

empty $rawData

使用相同参数的PUT请求:

filled $rawData

有没有一种方法可以获取原始的POST请求体?提前感谢。


2
同时,提供一个指向 PHP 手册页面的指针,说明为什么 POST http://www.php.net/manual/en/wrappers.php.php 中没有原始数据可用。 - David Riccitelli
1
回复上面的评论,它可以用于POST请求,但是不能与 enctype="multipart/form-data" 表单一起使用 ;) - STT LCU
正确,这就是我们谈论的内容(请参见问题)。 - David Riccitelli
1
我建议您在SO上查看这里的几个答案:(1) https://dev59.com/AHjZa4cB1Zd3GeqPgJ0A (2) https://dev59.com/YVXTa4cB1Zd3GeqP6O_X - David Riccitelli
@DavidRiccitelli 当然,我并没有说你错了,只是隐藏了这个问题的关键问题^^ - STT LCU
@DavidRiccitelli,所以答案是绝对不可能的。为什么你不写一个我可以接受的答案呢? - Vitaly Chirkov
2个回答

9
在 PHP 5.4 之前,除了某些 SAPI 实现外,enctype="multipart/form-data" 中不提供 $HTTP_RAW_POST_DATA(解释请参考这里:http://www.php.net/manual/en/wrappers.php.phphttp://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data)。建议查看以下已有问题的答案:php http request content raw data enctype=multipart/form-datauserland multipart/form-data handler
在 PHP 5.4+ 中,您可以使用 php.ini 指令 enable_post_data_reading 来禁用 PHP 消耗原始数据(因此处理它),但要注意,$_POST$_FILES 将不会被填充(请参考 Vitaly Chirkov 的回答)。

0

可以试试吗?

var_dump($HTTP_RAW_POST_DATA);

来源:

http://php.net/manual/en/reserved.variables.httprawpostdata.php

=== 编辑 - 这将不会显示'multipart/form-data'的原始帖子数据


3
这样做行不通:“$HTTP_RAW_POST_DATA 在 enctype="multipart/form-data" 下不可用”:http://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data - David Riccitelli
1
看起来:php://input在enctype="multipart/form-data"下不可用,请参考php.net/manual/en/wrappers.php - Bas Kuis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接