Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 关于“$HTTP\U RAW\U POST\U数据”被弃用的警告_Php_Configuration_Migration - Fatal编程技术网

Php 关于“$HTTP\U RAW\U POST\U数据”被弃用的警告

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()。那

我切换到PHP5.6.0,现在到处都有以下警告:

已弃用:自动填充$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);