Назад | Перейти на главную страницу

Apache не запускается после обновления PHP на CentOS 6.5 x64

У меня есть сервер разработчика с CentOS 6.5 и PHP 5.5.11 (последний из репозиториев REMI). Сегодня сделал:

yum --enablerepo=remi,remi-php55 update

Это обновило Apache и некоторые другие библиотеки, такие как Mongo для PHP (я думал, PECL). После обновления перезапустил свой httpd service и заметил, что не удается завершить работу Apache. Повторный запуск «по-видимому» исправил это, но теперь я обнаружил, что сервер не работает - веб-страницы не обслуживаются.

Проверка журналов Apache показывает эту строку:

Неустранимая ошибка PHP: Запуск PHP: для предотвращения повреждения данных вам не разрешено включать параметр mongo.native_long на 32-битных платформах в Неизвестно в строке 0

Возможно, я смогу исправить это, отключив или удалив это расширение, но, поскольку я использую расширение в некоторых местах, это не вариант.

Есть какие-нибудь советы о том, как решить эту проблему, кроме отключения расширения?

РЕДАКТИРОВАТЬ: Почему, если система i686, а библиотека i686, я получил эту ошибку

Я провел небольшое исследование журналов YUM и увидел результаты:

tail /var/log/yum.log
Apr 03 01:25:45 Updated: php-recode-5.5.11-1.el6.remi.i686
Apr 03 01:25:45 Updated: php-mbstring-5.5.11-1.el6.remi.i686
Apr 03 01:25:46 Updated: php-intl-5.5.11-1.el6.remi.i686
Apr 03 01:25:47 Updated: php-xml-5.5.11-1.el6.remi.i686
Apr 04 09:09:59 Updated: krb5-libs-1.10.3-15.el6_5.1.i686
Apr 04 09:10:00 Updated: httpd-tools-2.2.15-30.el6.centos.i686
Apr 04 09:10:07 Updated: php-pecl-mongo-1.5.0-1.el6.remi.5.5.i686
Apr 04 09:10:15 Updated: httpd-2.2.15-30.el6.centos.i686
Apr 04 09:10:16 Updated: krb5-workstation-1.10.3-15.el6_5.1.i686
Apr 04 09:10:21 Updated: krb5-devel-1.10.3-15.el6_5.1.i686

Почему если библиотека php-pecl-mongo-1.5.0-1.el6.remi.5.5.i686 Я получал эту ошибку? Что случилось?

РЕДАКТИРОВАТЬ 2: понизить проблемное расширение

Поскольку предыдущий тест не сработал, я сейчас пытаюсь понизить версию этой библиотеки следующим образом:

yum downgrade php-pecl-mongo-1.5.0-1.el6.remi.5.5.i686 --enablerepo=remi,remi-php55
Loaded plugins: fastestmirror, security
Setting up Downgrade Process
Loading mirror speeds from cached hostfile
 * base: centos.secrel.com.br
 * epel: mirror.cedia.org.ec
 * extras: centos.secrel.com.br
 * remi: mirror.1000mbps.com
 * remi-php55: mirror.1000mbps.com
 * updates: mirrors.ucr.ac.cr
Only Upgrade available on package: php-pecl-mongo-1.5.0-1.el6.remi.5.5.i686
Nothing to do

И я не могу, так что есть помощь и в этом?

EDIT3: поиск местоположения php.ini

Так как Ubuntu и CentOS имеют разную конфигурацию, мне кажется, что Apache может использовать другой php.ini файл, но он использует то, что я изменил, см. ниже:

locate php.ini
/etc/php.ini
/etc/php.ini.rpmnew
/usr/share/doc/php-common-5.5.11/php.ini-development
/usr/share/doc/php-common-5.5.11/php.ini-production
/var/www/html/apps/portal_de_logistica/vendor/doctrine/cache/tests/travis/php.ini
/var/www/html/apps/portal_ingenieros/vendor/doctrine/cache/tests/travis/php.ini
/var/www/html/imaginamos/vendor/doctrine/cache/tests/travis/php.ini
/var/www/html/kraken/vendor/doctrine/cache/tests/travis/php.ini

В /etc/php.ini У меня это в конце файла:

;Mongo
[mongodb]
mongo.native_long = 0
mongo.long_as_object = 1

Также я нашел любой файл, который мог вызвать проблему, выполнив ini_set() и ничего не было найдено, как показано ниже:

grep -R "mongo.native_long" /var/www/html/
grep: /var/www/html/apps/portal_de_logistica/web/bundles/acmedemo: No such file or directory

Решение

Итак, после головной боли я нашел решение:

yum remove php-pecl-mongo-1.5.0-1.el6.remi.5.5.i686
yum --enablerepo=remi,remi-php55 install php-devel.i686
pecl install mongo

Добавьте "extension = mongo.so" в php.ini после этого мой апач снова работает

Ваша ошибка гласит:

Неустранимая ошибка PHP: Запуск PHP: для предотвращения повреждения данных вам не разрешено включать параметр mongo.native_long на 32-битных платформах в Неизвестно в строке 0

Ключевым моментом здесь является mongo.native_long настройка. Похоже, ваша ОС 32-разрядная, но для этого конкретного параметра требуется 64-разрядная ОС. Лучшее долгосрочное решение для вас, если это сервер разработки, - перестроить его как 64-битную ОС.

Более быстрый вариант - зайти в свой php.ini файл и отключить mongo.native_long- не все MongoDB - поместив этот параметр конфигурации в php.ini вот так:

mongo.native_long = 0

А теперь перезапустите Apache. Все должно работать. Это предполагает конкретную функциональность mongo.native_long не нужен ничему в вашей кодовой базе. Дополнительные сведения о конфигурации MongoDB см. официальная документация здесь. А для более подробной информации mongo.native_long, эта запись в блоге кажется довольно полезным:

На 64-битных платформах параметр mongo.native_long позволяет хранить 64-битные целые числа в MongoDB. Тип данных MongoDB, который используется в этом случае, - это BSON LONG, а не BSON INT, который используется, если этот параметр отключен. Этот параметр также изменяет способ поведения BSON LONG, когда они считываются обратно из MongoDB. Без включения mongo.native_long драйвер будет преобразовывать каждый BSON LONG в двойной PHP, что приводит к потере точности.

Кажется, ваша ошибка связана с этим обновлением драйвера mongo php: https://jira.mongodb.org/browse/PHP-971 (если посмотреть на ошибку в коммите git, это именно то).

Если вы установили mongo.native_long на 0, но вы по-прежнему получаете ошибку, просмотрите любые скрипты php или страницы php и посмотрите, есть ли у них ini_set('mongo.native_long', 1); вверху (учитывая, что он жалуется на строку 0).