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

pecl install mongo - продолжает компилироваться с неправильным API модуля

Здесь работает Ubuntu 12.04, nginx и php5-fpm

У меня mongo хорошо работал с php 5.3, затем я добавил ppa ondrej / php5 и обновился до php5.4. Он сохранил расширения GD и CURL, но не mongo. Я повторно добавил строку в файл php.ini, и ничего. Затем я включил ошибки запуска и получил следующее:

PHP Startup: Unable to load dynamic library '/usr/lib/php5/20100525/mongo.so' - /usr/lib/php5/20100525/mongo.so: cannot open shared object file: No such file or directory

Итак, дикая догадка, я сделал find -name 'mongo.so' и переместил файл из 20090626 / в 20100525 / ..., что привело к этой ошибке:

PHP Startup: mongo: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match

Я тогда сделал pecl uninstall mongo и pecl install mongo - который создал новый файл mongo.so еще в 20090626 /

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

Я предполагаю, что либо:

  • pecl install mongo фактически устанавливает предварительно созданный двоичный файл (что было бы действительно глупо, но не так удивительно); или
  • У тебя все еще есть старый php5-dev пакет из вашей установки 5.3 сидит без дела, и pecl находит и использует это вместо версии 5.4. Взгляните на свой список пакетов, связанных с PHP (dpkg -l '*php*') и посмотрите, остались ли еще пакеты 5.3, и обновите их.

Великие умы думают одинаково, - написал womble через мгновение после того, как я понял, что происходит. Его ответ правильный и раньше моего, поэтому я приму его как ответ, но для справки в будущем решение было следующим:

apt-get update
apt-get install php5-dev
pecl uninstall mongo
pecl install mongo
/etc/init.d/php5-fpm restart

И, конечно же, mongo.so уже был в php.ini таким образом, что pecl не удалил его, что упростило обновление.