pecl install mongo-继续使用错误的模块 API 进行编译

pecl install mongo-继续使用错误的模块 API 进行编译

这里使用 Ubuntu 12.04、nginx 和 php5-fpm

我的 mongo 在 php 5.3 上运行良好,然后我添加了 ondrej/php5 ppa 并更新到 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在 20090626/ 中创建了新的 mongo.so 文件

我对这一切还很陌生,所以希望这是一个很容易修复的错误!我只需要让 mongo 重新启动并运行。

答案1

我的猜测可能是:

  • pecl install mongo实际上是在安装一个预先构建的二进制文件(这真的很愚蠢,但并不令人惊讶);或者
  • 您仍然保留php5-dev着 5.3 安装中的旧软件包,并且pecl正在查找和使用该软件包而不是 5.4 版本。查看您的 PHP 相关软件包列表 ( dpkg -l '*php*'),看看是否还有 5.3 软件包,然后升级它们。

答案2

英雄所见略同,在我弄清楚发生了什么事情后不久,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 不会将其删除,因此升级起来稍微容易一些。

相关内容