首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么要调用$HTTP_RAW_POST_DATA?

为什么要调用$HTTP_RAW_POST_DATA?
EN

Stack Overflow用户
提问于 2014-10-31 16:21:45
回答 2查看 5.5K关注 0票数 11

最近,我将生产服务器升级到Ubuntu14.04和PHP5.6,现在我在错误日志中收到警告:

2014/10/31 10:42:45 [error] 17128#0: *46238 FastCGI sent in stderr: "PHP message: PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0" while reading response header from upstream, client: 24.123.216.42, server: example.com, request: "POST /api/notes HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "example.com", referrer: "https://example.com/admin/"

阅读文件以及这个有点相关的问题:数据。但是,我搞不懂为什么要把这个通知录下来。据我所知,我在代码库中的任何地方都没有使用$HTTP_RAW_POST_DATA。我试过:

代码语言:javascript
运行
复制
find . -exec grep "HTTP_RAW_POST_DATA" {} \; -print 2>/dev/null

从我的项目的根目录(包括所有供应商目录),但我没有找到任何匹配。

我是always_populate_raw_post_data,似乎只有当always_populate_raw_post_data参数设置为TRUE时,才应该填充always_populate_raw_post_data。我检查了我的phpinfo(),参数被设置为0。

如果我没有显式地调用$HTTP_RAW_POST_DATA并且always_populate_raw_post_data被设置为0,为什么我要在错误日志中得到这些通知?将always_populate_raw_post_data设置为-1是做什么的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-06 21:43:49

下面是相关C代码和我的评论:

代码语言:javascript
运行
复制
static zend_bool populate_raw_post_data(TSRMLS_D)
{
    // not a post, empty request - return FALSE
    if (!SG(request_info).request_body) {
        return (zend_bool) 0;
    }

    // if always_populate_raw_post_data=0 then
    // if we don't know how to parse the post (unknown mimetype) return TRUE
    // otherwise (known mimetype) return FALSE
    if (!PG(always_populate_raw_post_data)) {
        return (zend_bool) !SG(request_info).post_entry;
    }

    // if always_populate_raw_post_data > 0 return TRUE
    // if always_populate_raw_post_data < 0 return FALSE
    return (zend_bool) (PG(always_populate_raw_post_data) > 0);
}

也就是说,将always_populate_raw_post_data设置为0仍然可以填充未知的内容类型。你必须用一个负值来跳过它。

这现在是手册中的记录在案

访问原始POST数据的首选方法是php://input,PHP5.6.0以后不再推荐$HTTP_RAW_POST_DATA。将always_populate_raw_post_data设置为-1将选择在未来版本的$HTTP_RAW_POST_DATA中实现的新行为,而在该版本中,$HTTP_RAW_POST_DATA从未被定义过。

票数 9
EN

Stack Overflow用户

发布于 2014-11-06 21:40:32

它已经作为错误报告提交了

也可以阅读

基本上将值更改为-1,这将解决您的“问题”。

另外,请确保您使用的是php://input,请阅读下面的V

我认为更好的做法是描述实际发生的情况:当E_DEPRECATED被填充时将生成$HTTP_RAW_POST_DATA,该值由always_populate_raw_post_data的值控制(我们已经描述过要填充http://php.net/manual/en/ini.core.php ),并删除不推荐的消息,确保不使用$HTTP_RAW_POST_DATA但使用php://input,这样就可以通过将always_populate_raw_post_data设置为-1禁用$HTTP_RAW_POST_DATA的总体。它将删除E_DEPRECATED。

来自http://php.net/manual/en/ini.core.php

如果设置为TRUE,PHP将始终填充包含原始POST数据的$HTTP_RAW_POST_DATA。否则,只有当数据的MIME类型未被识别时,变量才会被填充。 访问原始POST数据的首选方法是php://input,PHP5.6.0以后不再推荐$HTTP_RAW_POST_DATA。将always_populate_raw_post_data设置为-1将选择在未来版本的$HTTP_RAW_POST_DATA中实现的新行为,而在该版本中,$HTTP_RAW_POST_DATA从未被定义过。

更改PHP-5.6

可重用的optioanlly JITty初始化的php://input流将always_populate_raw_post_data INI设置更改为接受三个值,而不是两个。 -1:主人的行为;永远不要植入$GLOBALSHTTP_RAW_POST_DATA 0/off/随便什么: BC行为(如果未注册内容类型或请求方法不是POST),则填充 1/on/yes/true: BC行为(总是填充$GLOBALSHTTP_RAW_POST_DATA)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26679157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档