PHP 7:MongoDB 驱动程序问题
Posted
技术标签:
【中文标题】PHP 7:MongoDB 驱动程序问题【英文标题】:PHP 7: MongoDB Driver issue 【发布时间】:2017-04-24 09:39:42 【问题描述】:我在尝试安装 MongoDB php 库时遇到了错误:
$ composer require "mongodb/mongodb=^1.0.0"
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/mongodb.so' - /usr/lib/php/20151012/mongodb.so: undefined symbol: php_json_serializable_ce in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/mongodb.so' - /usr/lib/php/20151012/mongodb.so: undefined symbol: php_json_serializable_ce in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/mongodb.so' - /usr/lib/php/20151012/mongodb.so: undefined symbol: php_json_serializable_ce in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/mongodb.so' - /usr/lib/php/20151012/mongodb.so: undefined symbol: php_json_serializable_ce in Unknown on line 0
当我执行phpinfo()
时,我可以看到以下内容:
mongodb
mongodb support enabled
mongodb version 1.2.1
mongodb stability stable
libmongoc version 1.5.0
libbson version 1.5.0
当我执行 locate mongodb.so 时,这是我的 mongodb.so 文件所在的位置:
/usr/lib/php/20151012/mongodb.so
我注意到,这是20-mongodb.ini
文件所在的路径:
/etc/php/7.0/apache2/conf.d
另外,sudo pecl mongodb install
返回以下内容:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/mongodb.so' - /usr/lib/php/20151012/mongodb.so: undefined symbol: php_json_serializable_ce in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/mongodb.so' - /usr/lib/php/20151012/mongodb.so: undefined symbol: php_json_serializable_ce in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/mongodb.so' - /usr/lib/php/20151012/mongodb.so: undefined symbol: php_json_serializable_ce in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/mongodb.so' - /usr/lib/php/20151012/mongodb.so: undefined symbol: php_json_serializable_ce in Unknown on line 0
sudo pecl info mongodb
返回:
About pecl.php.net/mongodb-1.2.1
================================
Release Type PECL-style PHP extension (source code)
Name mongodb
Channel pecl.php.net
Summary MongoDB driver for PHP
Description The purpose of this driver is to provide
exceptionally thin glue between MongoDB
and PHP, implementing only fundemental and
performance-critical components
necessary to build a fully-functional MongoDB
driver.
Maintainers Hannes Magnusson <bjori@php.net> (lead)
Jeremy Mikola <jmikola@php.net> (lead)
Derick Rethans <derick@php.net> (lead)
Release Date 2016-12-07 18:25:03
Release Version 1.2.1 (stable)
API Version 1.2.1 (stable)
License Apache License
(http://www.apache.org/licenses/LICENSE-2.0)
Release Notes ** Bug
* [PHPC-848] - Fix BSON encoding of
immutable arrays and documents with circular
references
Required Dependencies PHP version 5.4.0-7.99.99
PEAR installer version 1.4.8 or newer
package.xml version 2.0
Last Modified 2016-12-09 00:28
Previous Installed 1.2.0
Version
我在 Google 上搜索了几个小时,但仍然一无所获。谢谢。
【问题讨论】:
【参考方案1】:首先键入此命令/usr/bin/php-config
以查看扩展目录的位置。
你会看到类似--extension-dir [/usr/lib/php/20131226]
比那个文件夹中的ls
看看mongo.so
是否在那里,如果没有把它放在那里。
键入whereis php
以在CLI
中找到您正在使用的php
编辑 CLI 的 php.ini 并添加 extension=mongo.so
【讨论】:
感谢您的回答。我的扩展目录在这里:/usr/lib/php/20151012
和 mongodb.so
在那里(不是mongo.so
,因为它已被弃用)。无论如何,这里是加载的配置文件:/etc/php/7.0/apache2/php.ini
以及以下目录中的附加 ini 文件 /etc/php/7.0/apache2/conf.d
其中20-mongodb.ini
文件是。
嗨,您必须在/etc/php/7.0/cli/php.ini
中添加extension=mongodb.so
,它应该可以工作。
谢谢。我整天都在解决这个问题,但仍然没有。当我输入 php --ini
时,我只是收到以下错误:PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/mongodb.so' - /usr/lib/php/20151012/mongodb.so: undefined symbol: php_json_serializable_ce in Unknown on line 0
无论如何,这可能是一个解决方案:derickrethans.nl/undefined-symbol.html 但仍然没有。
我认为这是一个不同的错误,你可以参考here【参考方案2】:
使用1.1.9 mongodb版本:
sudo pecl uninstall mongodb
sudo pecl install mongodb-1.1.9
composer update
【讨论】:
【参考方案3】:是的,有很好的答案。 这是我在 php7.1 中安装 mongo 所做的。我正在使用 ubuntu16.04 64bit:
sudo aptitude install -y php7.1-dev pkg-config
sudo -H pecl channel-update pecl.php.net
sudo aptitude install -y libcurl4-openssl-dev pkg-config libssl-dev libsslcommon2-dev
sudo pecl install mongodb
echo 'extension=mongodb.so' | sudo tee /etc/php/7.1/fpm/conf.d/30-mongodb.ini
echo 'extension=mongodb.so' | sudo tee /etc/php/7.1/cli/conf.d/30-mongodb.ini
sudo systemctl restart php7.1-fpm.service
这一切都是为了 nginx。如果您使用的是apache,请添加:
echo 'extension=mongodb.so' | sudo tee /etc/php/7.1/apache2/conf.d/30-mongodb.ini
还有一个。如果您在使用 mongo 时仍然出现错误。类似的东西:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/mongodb.so' - libssl.so.1.0.2: cannot open shared object file: No such file or directory in Unknown on line 0
不要绝望,运行以下命令:
sudo pecl uninstall mongodb
sudo pecl install mongodb
【讨论】:
【参考方案4】:我是 @Andrinux 和 @J.C. Gras 的建议,我收到了一个错误 phpize not found
。
所以我做了研究,发现了这个How to install and run phpize。这是因为我的系统上没有安装php-dev
,所以我安装了它。
按顺序,我做到了:
// Ubuntu 20.04.3
$ sudo apt-get update
$ sudo apt install php-dev
$ sudo pecl install mongodb (at the time, it installed mongodb-1.10.0)
如果您看到此消息,则扩展程序已成功安装
Build complete.
Don't forget to run 'make test'.
running: make INSTALL_ROOT="/tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0" install
Installing shared extensions: /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0/usr/lib/php/20200930/
running: find "/tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0" | xargs ls -dils
52067 4 drwxr-xr-x 3 root root 4096 Sep 28 16:18 /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0
52629 4 drwxr-xr-x 3 root root 4096 Sep 28 16:18 /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0/usr
52630 4 drwxr-xr-x 3 root root 4096 Sep 28 16:18 /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0/usr/lib
52631 4 drwxr-xr-x 3 root root 4096 Sep 28 16:18 /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0/usr/lib/php
52632 4 drwxr-xr-x 2 root root 4096 Sep 28 16:18 /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0/usr/lib/php/20200930
52627 8708 -rwxr-xr-x 1 root root 8916120 Sep 28 16:18 /tmp/pear/temp/pear-build-rootDvmP4U/install-mongodb-1.10.0/usr/lib/php/20200930/mongodb.so
Build process completed successfully
Installing '/usr/lib/php/20200930/mongodb.so'
install ok: channel://pecl.php.net/mongodb-1.10.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongodb.so" to php.ini
别忘了重启 PHP-FPM 和 APACHE 服务器
【讨论】:
以上是关于PHP 7:MongoDB 驱动程序问题的主要内容,如果未能解决你的问题,请参考以下文章
text 用于PHP的PHP 7.1 + nginx + MongoDB驱动程序
xampp 和 mongoDB:无法识别 mongo 驱动程序