【问题标题】:Reliable way to get the raw HTTP request body in PHP [duplicate]在 PHP 中获取原始 HTTP 请求正文的可靠方法 [重复]
【发布时间】:2012-11-15 00:21:48
【问题描述】:

可能重复:
Get raw post data

php://input 读取有效,除非请求正文为multipart/form-data 格式,在这种情况下不会读取任何内容。

我听说php://input 只能从一次读取,我怀疑这可能是造成这种情况的原因(即 PHP 可能在看到 multipart/form-data 之前从 php://input 读取,然后我才能动手它)。但是,在测试中,我发现我可以从流中多次读取而不会出现问题。

有没有办法获取任何格式的请求正文?

这是我目前所得到的:

$body = '';   

$handle = fopen('php://input', 'r');
while(!feof($handle)) {
    $body .= fread($handle, 1024);
}

【问题讨论】:

标签: php apache http


【解决方案1】:

您可以让 PHP 始终填充 $HTTP_RAW_POST_DATA 见http://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data 虽然不是最有效的方法。

【讨论】:

  • 上面写着 $HTTP_RAW_POST_DATA is not available with enctype="multipart/form-data"。
  • $HTTP_RAW_POST_DATA 现在已弃用。请我们 'php://input'
  • 使用 php://input 的问题是如果脚本的一部分(lib 包含或 sdk)已经读取 php://input,那么稍后在脚本执行中尝试执行相同操作事情,失败了。这是对以后的 php 版本做过的最愚蠢的贬值。
猜你喜欢
  • 1970-01-01
  • 2021-10-01
  • 2018-03-11
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多