警告不要使用$ HTTP_RAW_POST_DATA
我切换到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
好的,我依靠一些弃用的function。 除了我没有!
- 我从来没有在我的任何脚本中使用过这个variables。 说实话,我不知道它甚至存在。
-
phpinfo()
显示我always_populate_raw_post_data
设置为0(禁用)。 那么发生了什么?
我不想通过将此值设置为-1来“避免警告”。 这只会隐藏警告,我仍然有不推荐使用的configuration。 我想从源头上解决问题,并知道为什么PHP认为HTTP_RAW_POST_DATA
填充已打开。
事实certificate,我对错误信息的理解是错误的。 我会说它的特点非常糟糕的话的select。 谷歌search显示我有人像我一样错误地理解了这个消息 – 请参阅PHP错误#66763 。
在完全没有帮助的情况下“这是RM想要的方式”。 泰瑞尔解释说,将它设置为“-1”不会使警告消失。 它做正确的事情 ,即它完全禁用填充罪魁祸首variables。 事实certificate,它设置为0 仍然在某些情况下填充数据。 谈论糟糕的devise! 引用PHP RFC :
将always_populate_raw_post_data INI设置更改为接受三个值而不是两个值。
- -1:主人的行为; 永远不要填充$ GLOBALS [HTTP_RAW_POST_DATA]
- 0 / off / whatever:BC行为(如果内容types未注册或请求方法不是POST)
- 1 / on / yes / true:BC行为(总是填充$ GLOBALS [HTTP_RAW_POST_DATA])
所以是的,将它设置为-1不仅可以避免警告,就像信息所说,但最终还是禁用了这个variables,这正是我想要的。
我在nginx服务器(DigitalOcean)上遇到了同样的问题 – 我只需要以root
身份login并修改文件/etc/php5/fpm/php.ini
。
要findalways_populate_raw_post_data
行,我首先运行grep
:
grep -n 'always_populate_raw_post_data' php.ini
这返回704
行
704:;always_populate_raw_post_data = -1
然后只需用vi
编辑器打开php.ini
就行了:
vi +704 php.ini
删除分号取消注释并保存文件:wq
最后重启服务器,错误消失了。
过了一段时间,直到我遇到这个错误。 对任何可能遇到这个问题的人提出我的回答。
错误只意味着你正在发送一个空的POST请求。 HTTPRequests上通常会发现此错误,而不传递任何参数。 为了避免这个错误,你总是可以在不改变php.ini的情况下向POST添加一个参数。
喜欢:
$.post(URL_HERE ,{addedvar : 'anycontent'} ,function(d){ doAnyHere(d); } ,'json' //or 'html','text' );
如果你正在使用WAMP …
您应该在php.ini
添加或取消注释always_populate_raw_post_data
属性,并将其值设置为-1
。 在我的情况下, php.ini
位于:
C:\wamp64\bin\php\php5.6.25\php.ini
但如果你仍然收到警告(就像我一样)
您还应该在
phpForApache.ini
设置always_populate_raw_post_data = -1
:
C:\wamp64\bin\php\php5.6.25\phpForApache.ini
如果找不到该文件,请打开浏览器窗口并转至:
http://localhost/?phpinfo=1
并查找加载的configuration文件密钥的值。 在我的情况下,WAMP使用的
php.ini
位于:
C:\wamp64\bin\apache\apache2.4.23\bin\php.ini
(符号链接C:\ wamp64 \ bin \ php \ php5.6.25 \ phpForApache.ini)
最后重启WAMP(或者点击重启所有服务)
取消注释
always_populate_raw_post_data = -1
在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
对于任何人仍然在改变php.init作为接受的答案build议后,与这个问题苦苦挣扎。 由于当没有任何参数通过POST
ajax请求时发生的错误,所有你需要做的就是将发送方法改为GET
。
var xhr = $.ajax({ url: url, type: "GET", dataType: "html", timeout: 500, });
如果您想保留POST
方法,还有其他select是为了将一个空的JSON对象添加到ajax petititon。
var xhr = $.ajax({ url: url, type: "POST", data: {name:'emtpy_petition_data', value: 'empty'} dataType: "html", timeout: 500, });
如果.htaccess
文件不能avilable创build它在根文件夹并通过这行代码。
把这个放在.htaccess
文件中(对APItesting效果很好)
<IfModule mod_php5.c> php_value always_populate_raw_post_data -1 </IfModule>