这里使用 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 不会将其删除,因此升级起来稍微容易一些。