У меня есть сервер разработчика с 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).