Php 关于“$HTTP\U RAW\U POST\U数据”被弃用的警告
我切换到PHP5.6.0,现在到处都有以下警告:Php 关于“$HTTP\U RAW\U POST\U数据”被弃用的警告,php,configuration,migration,Php,Configuration,Migration,我切换到PHP5.6.0,现在到处都有以下警告: 已弃用:自动填充$HTTP\u RAW\u POST\u数据已弃用并将 将在将来的版本中删除。要避免此警告集 'always_populate_raw_post_data'到php.ini中的'-1',并使用php://input 流动 相反在第0行的未知位置 警告:无法修改标题信息-标题已在第0行中未知发送 好吧,我依赖一些不推荐的特性。除了我没有 我从来没有在我的任何脚本中使用过这个变量。老实说,我甚至不知道它的存在 phpinfo()。那
已弃用:自动填充$HTTP\u RAW\u POST\u数据已弃用并将
将在将来的版本中删除。要避免此警告集
'always_populate_raw_post_data'到php.ini中的'-1',并使用php://input 流动
相反在第0行的未知位置
警告:无法修改标题信息-标题已在第0行中未知发送
好吧,我依赖一些不推荐的特性。除了我没有
phpinfo()。那么到底发生了什么
我不想通过将此值设置为-1来“避免警告”。这只会隐藏警告,我仍然会使用不推荐的配置。我想从源头上解决这个问题,并了解为什么PHP认为已打开了填充
HTTP\u RAW\u POST\u DATA
。事实证明,我对错误消息的理解是错误的。我得说,它的特点是用词非常糟糕。通过谷歌搜索,我发现其他人和我一样误解了这条信息——明白了
在完全没有帮助的情况下,“这是RMs想要的方式。”对Mike的错误回应后,Tyrael解释说,将其设置为“-1”并不仅仅是发出离开的警告。它做了正确的事情,即完全禁用填充罪犯变量。结果表明,在某些情况下,将其设置为0仍然会填充数据。谈论糟糕的设计!引用:
更改always_populate_raw_post_data INI设置以接受三个值而不是两个值
- -1:主人的行为;永远不要填充$GLOBALS[HTTP\u RAW\u POST\u DATA]
- 0/off/whatever:BC行为(如果内容类型未注册或请求方法不是POST,则填充)
- 1/on/yes/true:BC行为(始终填充$GLOBALS[HTTP\u RAW\u POST\u DATA])
是的,将其设置为-1不仅可以避免警告,就像消息中所说的那样,而且最终还可以禁用填充此变量,这正是我想要的。我在nginx服务器(DigitalOcean)上遇到了同样的问题-我所要做的就是以
root
身份登录并修改文件/etc/php5/fpm/php.ini
要查找包含始终填充\u原始\u发布数据的行
I首先运行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添加参数 比如: 取消注释
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
如果您使用的是WAMP。。。
您应该在php.ini
中添加或取消注释属性always\u populate\u raw\u post\u data
,并将其值设置为-1
。在我的例子中,php.ini
位于:
C:\wamp64\bin\php\php5.6.25\php.ini
。但是如果你仍然收到警告(就像我一样)
您还应该在phpForApache.ini中设置始终填充\u原始\u发布数据=-1
:
C:\wamp64\bin\php\php5.6.25\phpForApache.ini
如果找不到此文件,请打开浏览器窗口并转到:
http://localhost/?phpinfo=1
并查找加载的配置文件键的值。在我的例子中,WAMP使用的php.ini
位于:
C:\wamp64\bin\apache\apache2.4.23\bin\php.ini
(符号链接到C:\wamp64\bin\php\php5.6.25\phpForApache.ini)
最后重新启动WAMP(或单击restart all services)对于在更改php.init后仍困扰此问题的任何人,如公认的答案所示。由于错误发生在通过
POST
发出ajax请求时,没有任何参数,因此您所要做的就是将send方法更改为GET
var xhr = $.ajax({
url: url,
type: "GET",
dataType: "html",
timeout: 500,
});
如果出于任何原因想要保留方法POST
,还有一个选项是向ajax小标题添加一个空JSON对象
var xhr = $.ajax({
url: url,
type: "POST",
data: {name:'emtpy_petition_data', value: 'empty'}
dataType: "html",
timeout: 500,
});
如果
.htaccess
文件不可用,请在根文件夹中创建该文件,并跳过此代码行
将其放入.htaccess
文件中(测试API是否运行良好)
php\u值始终\u填充\u原始\u发布\u数据-1
;始终\u填充\u原始\u发布\u数据=-1
在php.init中
删除此行的注释。。
always_populate_raw_post_data=-1我从html表单(post方法)发送数据时收到此错误消息。我所要做的就是将表单中的编码从“text/plain”更改为“application/x-www-form-urlencoded”或“multipart/formdata”。
错误消息非常误导。不幸的是,@EatOng的回答不正确。在阅读了他的答案后,我向我发出的每个AJAX请求添加了一个虚拟变量(即使其中一些请求已经有一些字段),以确保错误永远不会出现 但是刚才我在PHP中遇到了同样的错误。我再次确认我已经发送了一些POST数据(还有一些其他字段以及伪变量)。PHP版本
5.6.25
,始终填充\u原始\u发布\u数据
值设置为0
另外,当我发送应用程序/json
请求时
var xhr = $.ajax({
url: url,
type: "POST",
data: {name:'emtpy_petition_data', value: 'empty'}
dataType: "html",
timeout: 500,
});
<IfModule mod_php5.c>
php_value always_populate_raw_post_data -1
</IfModule>
<?php
if(ini_get('always_populate_raw_post_data') != '-1')
{
// Get the path to php.ini file
$iniFilePath = php_ini_loaded_file();
// Get the php.ini file content
$iniContent = file_get_contents($iniFilePath);
// Un-comment (if commented) always_populate_raw_post_data line, and set its value to -1
$iniContent = preg_replace('~^\s*;?\s*always_populate_raw_post_data\s*=\s*.*$~im', 'always_populate_raw_post_data = -1', $iniContent);
// Write the content back to the php.ini file
file_put_contents($iniFilePath, $iniContent);
// Exit the php script here
// Also, write some response here to notify the user and ask to restart Apache / WAMP / Whatever.
exit;
}
ini_set('always_populate_raw_post_data', -1);