Невозможно остановить устаревшее предупреждение в PHP

Кажется, я столкнулся с проблемой, описанной в этом блоге под названием -will-be-removed-in-a-future-version/" rel="nofollow noreferrer">PHP 5.6: «Автоматическое заполнение $HTTP_RAW_POST_DATA устарело и будет удалено в будущей версии».. Как видно из этого вывода 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, когда он пытается связаться с TestLink через XML-RPC. Вы можете ясно видеть, что устаревшее предупреждение предшествует ответу XML, что, в свою очередь, вызывает проблему «изменить информацию заголовка».

Но чего я не понимаю, так это того, что я не могу подавить это предупреждение. Если я установлю always_populate_raw_post_data = -1, похоже, это не повлияет. Я думал, что редактирую не тот файл php.ini, но последовал совету здесь и смог убедиться, что изменения, которые я делаю, принимаются сервером. Моя единственная теория заключается в том, что TestLink переопределяет эти значения в приложении, но я не могу найти ничего связанного с моей установкой.

РЕДАКТИРОВАТЬ: Некоторая информация об окружающей среде: Apache 2.2.15-39 на порту 80, с 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...


person harschware    schedule 09.03.2015    source источник
comment
Вы перезапустили веб-сервер после установки его в -1?   -  person Matt    schedule 09.03.2015
comment
Спасибо. да. Я вижу изменения в моем скрипте phpinfo, поэтому php их подхватывает. Но, как ни странно, игнорирование некоторых значений, например, мне не удалось получить ошибки для отображения в файле журнала, когда я установил для error_log значение /tmp/php_errors.log... если я запустил php в командной строке, ошибки попадут в этот файл, а не те из скриптов которые запускаются на сервере.   -  person harschware    schedule 09.03.2015
comment
Я прочитал сообщение в блоге, это похоже на очень раздражающую ситуацию. Можете ли вы добавить ob_start(); в свой сценарий, чтобы попытаться избежать этого?   -  person Matt    schedule 09.03.2015


Ответы (2)


Вы также можете установить для error_reporting значение E_ALL и ~E_DEPRECATED, что должно предотвратить отображение уведомлений об устаревании. Это может быть применено в php.ini или в конфигурации сборки в Jenkins.

person Kuba F.    schedule 09.03.2015
comment
Пробовал это в php.ini, но безуспешно. Можете ли вы объяснить, как изменить его в сборке jenkins? - person harschware; 10.03.2015
comment
Если вы подозреваете, что что-то изменяет ваши значения отчетов об ошибках, вы всегда можете сделать это из кода: error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED); я не знаю, как именно Jenkins строит ваше приложение, поэтому трудно посоветовать, куда поместить его в сборку Jenkins. - person Kuba F.; 10.03.2015

Что ж, я многому научился, копаясь в этом, но, как оказалось, моя ошибка была довольно простой. Я скопировал URL-адрес XML-RPC из какой-то документации в конфигурацию плагина Jenkins Testlink и забыл отредактировать его, чтобы он был URL-адресом моего сервера.

person harschware    schedule 10.03.2015