关于不推荐使用`$ HTTP_RAW_POST_DATA`的警告

rr-*_*rr- 117 php migration configuration

我切换到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
Run Code Online (Sandbox Code Playgroud)

好吧,我依靠一些不赞成的功能.除了我没有!

  1. 我没有在任何脚本中使用过这个变量.说实话,我不知道它甚至存在.
  2. phpinfo()显示我已always_populate_raw_post_data设置为0(禁用).那么发生了什么?

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

rr-*_*rr- 132

事实证明,我对错误信息的理解是错误的.我会说它的选择非常糟糕.谷歌搜索周围显示我其他人误解了消息,就像我一样 - 请参阅PHP bug#66763.

完全没有帮助之后"这就是客户经理想要的方式." Tyrael对这个错误的回应解释说,将它设置为"-1"并不会使警告消失.它做的是正确的,即它完全禁用填充罪魁祸首变量.事实证明,将其设置为0 STILL会在某些情况下填充数据.谈论糟糕的设计!引用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不仅可以避免警告,就像消息所说的那样,但它最终也会禁用填充此变量,这就是我想要的.

  • **tl; dr**这是一个愚蠢的警告,即使你不使用它所警告的东西也会出现; 将_always_populate_raw_post_data_设置为-1 (23认同)
  • 我把它设置为`always_populate_raw_post_data = -1`.现在还有警告来破坏json的反应 (7认同)
  • 所以答案实际上是转到你的`php.ini`文件并设置(或取消注释)`always_populate_raw_post_data = -1`. (2认同)

小智 38

有一段时间,直到我遇到这个错误.为可能偶然发现这个问题的人提出我的答案.

该错误仅表示您正在发送空POST请求.在没有传递参数的HTTPRequests上常见此错误.要避免此错误,您始终可以在不更改php.ini的情况下向POST添加参数.

喜欢:

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

  • 这是我在这个问题上找到的最佳答案!我一直在处理这个问题一个月,它让我看错了方向.事故发生时,我只是一个空的POST,一旦修好,一切都很好!谢谢你让我免于头疼! (4认同)

Seb*_*ski 32

我在nginx服务器(DigitalOcean)上遇到了同样的问题 - 我所要做的就是登录root并修改文件/etc/php5/fpm/php.ini.

要找到always_populate_raw_post_data我第一次运行的行grep:

grep -n 'always_populate_raw_post_data' php.ini
Run Code Online (Sandbox Code Playgroud)

那回归了 704

704:;always_populate_raw_post_data = -1
Run Code Online (Sandbox Code Playgroud)

然后只需php.ini使用vi编辑器打开该行:

vi +704 php.ini
Run Code Online (Sandbox Code Playgroud)

删除半冒号以取消注释并保存文件 :wq

最后重启服务器,错误就消失了.

  • 如果你的`php.ini`中注释掉了这行,你可能正在使用php.ini的开发配置. (3认同)

Ric*_*dos 13

如果你正在使用WAMP ......

你应该添加或取消对财产always_populate_raw_post_dataphp.ini和其值设置为-1.在我的情况下php.ini位于:

C:\wamp64\bin\php\php5.6.25\php.ini

..但如果你仍然收到警告(就像我一样)

你也应该设定always_populate_raw_post_data = -1phpForApache.ini:

C:\wamp64\bin\php\php5.6.25\phpForApache.ini

如果找不到此文件,请打开浏览器窗口并转到:

http://localhost/?phpinfo=1

并查找Loaded Configuration File键的值.就我而言php.ini,WAMP使用的位于:

C:\wamp64\bin\apache\apache2.4.23\bin\php.ini (符号链接到C:\ wamp64\bin\php\php5.6.25\phpForApache.ini)

最后重启WAMP(或点击重启所有服务)


Nav*_*tee 5

取消注释

always_populate_raw_post_data = -1 
Run Code Online (Sandbox Code Playgroud)

在php.ini(第#703行)并重新启动APACHE服务帮我摆脱了消息

; Always populate the $HTTP_RAW_POST_DATA variable. PHP's default behavior is
; to disable this feature and it will be removed in a future version.
; If post reading is disabled through enable_post_data_reading,
; $HTTP_RAW_POST_DATA is *NOT* populated.
; http://php.net/always-populate-raw-post-data
; always_populate_raw_post_data = -1
Run Code Online (Sandbox Code Playgroud)


Sha*_*ari 5

如果该.htaccess文件不可用,请在根文件夹上并在此代码行之后创建它。

将此.htaccess文件放入文件中(已测试API正常运行)

<IfModule mod_php5.c>
    php_value always_populate_raw_post_data -1
</IfModule>
Run Code Online (Sandbox Code Playgroud)

  • 请解释我的主 (3认同)