无法在 PHP 中停止弃用警告
Cannot stop deprecated warning in PHP
我似乎遇到了标题为 PHP 5.6: “Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version.” 的博客中描述的问题。从我服务器上 ngrep 的输出可以看出:
HTTP/1.1 200 OK..Date: Mon, 09 Mar 2015 20:28:06 GMT..Server: Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/1.0.0j DAV/2 PHP/5.6.2..Content-Length: 819..
Keep-Alive: timeout=5, max=100..Connection: Keep-Alive..Content-Type: text/html; charset=UTF-8....<br />.<b>Deprecated</b>: 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 <b>Unknown</b> on line <b>0</b><br />.<br />.<b>Warning</b>: Cannot modify header information - headers
already sent in <b>Unknown</b> on line <b>0</b><br />.<?xml version="1.0"?>.<methodResponse>. <params>. <param>. <value>.
<array><data>. <value><struct>. <member><name>code</name><value><int>2000</int></value></member>. <member><name>message</name><value><string>
(check DevKey) - Can not authenticate client: invalid developer key</string></value></member>.</struct></value>.</data></array>. </value>.
</param>. </params>.</methodResponse>.
此消息是当 Jenkins TestLink 插件尝试通过 XML-RPC 与 TestLink 通信时返回给它的消息。您可以清楚地看到已弃用的警告在 XML 响应之前,这反过来会导致 "modify header information" 问题。
但是,我不明白的是我似乎无法抑制此警告。如果我设置 always_populate_raw_post_data = -1
它似乎没有效果。我想也许我正在编辑错误的 php.ini 文件,但我遵循了建议 here 并且能够验证我所做的更改正在被服务器接收。我唯一的理论是 TestLink 覆盖了应用程序中的这些值,但我似乎无法在我的安装中找到任何相关内容。
编辑:
一些环境信息:端口 80 上的 Apache 2.2.15-39,PHP 5.6.6-1 和 TestLink 1.9.13 使用 MySQL 5.1.73。
Jenkins 1.601 在 Tomcat 8.0.20 运行 端口 8089 上。
如果我仔细查看上面的消息,我会看到 PHP/5.6.2
,但是如果我在我的系统上进行查找 find / -type f -name php
,我只会得到 /usr/bin/php
...
您还可以将 error_reporting 设置为 E_ALL & ~E_DEPRECATED,这样可以防止显示有关弃用的通知。
这可能适用于 php.ini 或 Jenkins 中的构建配置。
好吧,我在深入研究的过程中学到了很多东西,但事实证明我的错误很简单。我已经将一些文档中的 XML-RPC URL 复制到 Jenkins Testlink 插件的配置中,忘记将其编辑为我的服务器的 URL。
我似乎遇到了标题为 PHP 5.6: “Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version.” 的博客中描述的问题。从我服务器上 ngrep 的输出可以看出:
HTTP/1.1 200 OK..Date: Mon, 09 Mar 2015 20:28:06 GMT..Server: Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/1.0.0j DAV/2 PHP/5.6.2..Content-Length: 819..
Keep-Alive: timeout=5, max=100..Connection: Keep-Alive..Content-Type: text/html; charset=UTF-8....<br />.<b>Deprecated</b>: 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 <b>Unknown</b> on line <b>0</b><br />.<br />.<b>Warning</b>: Cannot modify header information - headers
already sent in <b>Unknown</b> on line <b>0</b><br />.<?xml version="1.0"?>.<methodResponse>. <params>. <param>. <value>.
<array><data>. <value><struct>. <member><name>code</name><value><int>2000</int></value></member>. <member><name>message</name><value><string>
(check DevKey) - Can not authenticate client: invalid developer key</string></value></member>.</struct></value>.</data></array>. </value>.
</param>. </params>.</methodResponse>.
此消息是当 Jenkins TestLink 插件尝试通过 XML-RPC 与 TestLink 通信时返回给它的消息。您可以清楚地看到已弃用的警告在 XML 响应之前,这反过来会导致 "modify header information" 问题。
但是,我不明白的是我似乎无法抑制此警告。如果我设置 always_populate_raw_post_data = -1
它似乎没有效果。我想也许我正在编辑错误的 php.ini 文件,但我遵循了建议 here 并且能够验证我所做的更改正在被服务器接收。我唯一的理论是 TestLink 覆盖了应用程序中的这些值,但我似乎无法在我的安装中找到任何相关内容。
编辑: 一些环境信息:端口 80 上的 Apache 2.2.15-39,PHP 5.6.6-1 和 TestLink 1.9.13 使用 MySQL 5.1.73。 Jenkins 1.601 在 Tomcat 8.0.20 运行 端口 8089 上。
如果我仔细查看上面的消息,我会看到 PHP/5.6.2
,但是如果我在我的系统上进行查找 find / -type f -name php
,我只会得到 /usr/bin/php
...
您还可以将 error_reporting 设置为 E_ALL & ~E_DEPRECATED,这样可以防止显示有关弃用的通知。 这可能适用于 php.ini 或 Jenkins 中的构建配置。
好吧,我在深入研究的过程中学到了很多东西,但事实证明我的错误很简单。我已经将一些文档中的 XML-RPC URL 复制到 Jenkins Testlink 插件的配置中,忘记将其编辑为我的服务器的 URL。