php http_raw,PHP Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and w

ITKEE社区V3.0.1版本更新,补丁包下载了解详情 , 获取ITKEE社区版本,快速授权了解详情

最近在Apache的error.log里出现一个E_DEPRECATED,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

里面提到在php.ini将always_populate_raw_post_data设为-1可修复。按建议来做,重启Apache,再运行,却再出现错误。

PHP Notice:  Undefined index: HTTP_RAW_POST_DATA in ***xin\\index.php on line 43

查看对应的line

43,发现此句用了$GLOBALS["HTTP_RAW_POST_DATA"],而将always_populate_raw_post_data设为-1后,则强制

$HTTP_RAW_POST_DATA 未定义。因为根据之前的提示HTTP_RAW_POST_DATA可能在后续的 PHP 版本中被移除,需要用获取php://input的文件流来代替。于是将$GLOBALS["HTTP_RAW_POST_DATA"]改为file_get_contents('php://input')。

重新再运行,一切正常啦。

伴随着这个Deprecated的还有个Warning:PHP

Warning:  Cannot modify header information - headers already sent in

Unknown on line

0。不过弄好这个Deprecated后这个Warning也消失了。猜想是和$HTTP_RAW_POST_DATA有关,不过根据Warning的意思,它是怎样被拦截不能修复头信息的呢?

百度到的出现此Warning是这样子的:PHP脚本开始执行时,它可以同时发送header(标题)信息和主体信息。

Header信息(来自 header() 或 SetCookie() 函数)并不会立即发送,相反,它被保存到一个列表中。

这样就可以允许你修改标题信息,包括缺省的标题(例如 Content-Type 标题)。但是,一旦脚本发送了任何非标题的输出(例如,使用 HTML

或 print() 调用),那么PHP就必须先发送完所有的Header,然后终止 HTTP header。而后继续发送主体数据。从这时开始,任何添加或修改Header信息的试图都是不允许的,并会发送上述的错误消息之一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值