有关“$HTTP_RAW_POST_DATA”被弃用的警告

2022-08-30 07:06:43

我切换到PHP 5.6.0,现在我到处都收到以下警告:

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

Warning: Cannot modify header information - headers already sent in Unknown on line 0

好吧,我依赖于一些已弃用的功能。除了我没有!

  1. 我从未在任何脚本中使用此变量。说实话,我甚至不知道它的存在。
  2. phpinfo()表示我已设置为 0(禁用)。这是怎么回事呢?always_populate_raw_post_data

我不想通过将此值设置为-1来“避免警告”。这只会隐藏警告,我仍然会有弃用的配置。我想从源头上解决问题,并知道为什么PHP认为填充是打开的。HTTP_RAW_POST_DATA


答案 1

事实证明,我对错误消息的理解是错误的。我会说它的单词选择非常差。谷歌搜索显示其他人完全像我一样误解了消息 - 请参阅PHP错误#66763

在完全没有帮助的“这是RM想要的方式”之后,Mike对这个错误的回应,Tyrael解释说,将其设置为“-1”并不仅仅是警告要消失。它做了正确的事情,即它完全禁止填充罪魁祸首变量。事实证明,将其设置为 0 在某些情况下仍会填充数据。谈论糟糕的设计!引用 PHP RFC

更改always_populate_raw_post_data INI 设置以接受三个值而不是两个值。

  • -1:主人的行为;永远不要填充$GLOBALS[HTTP_RAW_POST_DATA]
  • 0/off/whatever:BC 行为(如果内容类型未注册或请求方法不是 POST,则填充)
  • 1/on/yes/true:BC 行为(始终填充$GLOBALS[HTTP_RAW_POST_DATA])

所以,是的,将其设置为-1不仅可以避免警告,就像消息所说的那样,而且它最终还禁用了填充此变量,这就是我想要的。


答案 2

过了一段时间,直到我遇到这个错误。为任何可能偶然发现这个问题的人提供我的答案。

该错误仅表示您正在发送空的 POST 请求。此错误通常在未传递任何参数的 HTTPRequest 上发现。为避免此错误,您始终可以在不更改 php.ini的情况下向 POST 添加参数。

喜欢:

$.post(URL_HERE
    ,{addedvar : 'anycontent'}
    ,function(d){
       doAnyHere(d);
    }
    ,'json' //or 'html','text'
);

推荐