我正在尝试安装MongoDB PHP驱动程序,以便我可以连接到另一台机器上的MongoDB服务器。在AWS Linux上使用PHP 5.6。
我使用了sudo pecl install mongodb
。最初有几个关于依赖关系的错误,但我添加了所有错误,然后它似乎安装没有任何错误。
但是,加载phpinfo()
时,我看不到任何对Mongo的引用。当我尝试跑步时:
$connection = new MongoClient();
我
PHP Fatal error: Class 'MongoClient' not found in /var/www/html/mongo.php on line 3
我确实将extension=mongodb.so
放入了我的php.ini,但这导致了另一个错误:
PHP Startup: Unable to load dynamic library '/usr/lib64/php/5.6/modules/mongodb.so' - /usr/lib64/php/5.6/modules/mongodb.so: undefined symbol: php_json_serializable_ce in Unknown on line 0
这个错误似乎与json相对于MongoDB加载的顺序有关。但就像我的情况一样,MongoDB根本没有加载,我不确定这是否适用于此。
我很感激为什么这不起作用的帮助。
答案 0 :(得分:1)
对我来说,遵循上面的圣人建议后,我仍然无法在phpinfo中看到mongo。我最后使用pecl卸载并重新安装mongodb,并注意到make的输出结束时,它说:
configuration option "php_ini" is not set to php.ini location
遵循:pecl config-set php_ini /etc/php.ini
然后:
sudo pecl uninstall mongodb
sudo pecl install mongodb
systemctl restart php-fpm
systemctl restart httpd
之后,mongo显示在php -i:
中 php -i|grep mongo
/etc/php.d/50-mongodb.ini
mongodb
libmongoc bundled version => 1.9.4
libmongoc SSL => enabled
libmongoc SSL library => OpenSSL
libmongoc crypto => enabled
libmongoc crypto library => libcrypto
libmongoc crypto system profile => disabled
libmongoc SASL => disabled
libmongoc compression => enabled
libmongoc compression snappy => disabled
libmongoc compression zlib => enabled
mongodb.debug => no value => no value
和phpinfo:
http://1.2.3.4/phpinfo.php/
mongodb
MongoDB support enabled
MongoDB extension version 1.4.3
MongoDB extension stability stable
libbson bundled version 1.9.4
libmongoc bundled version 1.9.4
libmongoc SSL enabled
libmongoc SSL library OpenSSL
libmongoc crypto enabled
libmongoc crypto library libcrypto
libmongoc crypto system profile disabled
libmongoc SASL disabled
libmongoc compression enabled
libmongoc compression snappy disabled
libmongoc compression zlib enabled
Directive Local Value Master Value
mongodb.debug no value no value
答案 1 :(得分:0)
长话短说,不推荐使用MongoClient for PHP。 (https://github.com/mongodb/mongo-php-driver/issues/300#issuecomment-210820288)
而不是$connection = new MongoClient();
你想要使用
$connection = new MongoDB\Driver\Manager();
希望这有帮助。
答案 2 :(得分:0)
我遇到了同样的情况,我从mongo开发者那里得到了这个解决方案 您不需要将mongodb.so放在php.ini中,而是将其作为一个单独的模块 如果您使用的是debian
cat << EOF > /etc/php5/mods-available/mongodb.ini
; priority=99
extension=mongodb.so
EOF
php5enmod mongodb
如果您使用的是fedora
echo "extension=mongodb.so" > /etc/php.d/50-mongodb.ini
然后重启你的apache 它会正常工作。