嗯,我发现了一个奇怪的情况。我在一个项目中同时使用了 PHP 和 MongoDB,并更新了相关软件。升级后,我确实确保更新了新的 conf 文件,一切正常 --- 除了当我尝试使用该类时MongoClient
,我收到以下致命错误:
致命错误:未捕获错误:在 /srv/http/test.php 中未找到类“MongoClient”
所以我的第一反应是检查我的代码/etc/php/php.ini
以确保 mongodb.so 被正确包含。我在其他extension
几行代码之后找到了它:
extension=mcrypt.so
extension=zip.so
extension=mongodb.so ; <--- here it is
检查完这些后,我加载了一个快速phpinfo()
脚本来检查我是否使用了正确的php.ini
文件,并确认我使用了正确的文件。不仅如此,mongodb 驱动程序似乎也已正确加载!
Loaded Configuration File /etc/php/php.ini
mongodb support enabled
mongodb version 1.1.1
mongodb stability stable
libmongoc version 1.3.1-dev
libbson version 1.3.0
于是我重启了 httpd 并再次尝试。没用,仍然找不到该类MongoClient
。因此我尝试从发行版的包管理器而不是从发行版的包管理器安装它pecl
,情况与上面描述的相同。
以下是情况的简要概述:
- Linux 内核 4.3.3
- PHP 版本 7.0.1
- php-mongodb 版本 1.1.1
- 是的,1.1.1 支持php7。
- 似乎配置正确,并且 mongodb 已启用并显示在 中
phpinfo()
。 pecl
尝试通过我的发行版的包管理器安装 mongodb 驱动程序。
其他可能有用的信息:
- MongoDB 版本 3.2.0
mongod
在跑- 也尝试过重新启动,但没有变化。
答案1
我找到答案了。
课程已更改。不再是\MongoClient
,现在是\MongoDB\Driver\Manager
我所需要的只是重构。新驱动程序旨在成为高级功能中填充用户空间库的低级驱动程序,因此其他任何升级到 php7 的人,请务必检查您是否熟悉新驱动程序,或者在执行此操作时用户空间库是否存在。希望这个问题/答案将来能帮助其他人。
这是目前用于 PHP 的大型 Mongo 库之一:mongo-php-库。
答案2
正如您所提到的,从 PHP7 开始与 MongoDB 交互的类结构已经发生了变化,您需要重构代码(很大程度上取决于最初的计划和编写方式)。
您可能需要研究的一个解决方案是https://github.com/alcaeus/mongo-php-adapter
我注意到在大多数情况下,只需包含适配器库就可以让旧的 PHP5 代码正常工作。
那么我强烈建议您将代码迁移到新的 MongoDB PHP 库(https://github.com/mongodb/mongo-php-library) 或者您使用本机驱动程序来享受速度提升带来的好处。
答案3
- 首先,我们需要按照 MongoDB 官方网站中提到的步骤在机器上安装 MongoDB
- 下一步是安装 MongoDB 驱动器以便与 PHP 一起使用。
PHP 版本 5.99.99 或更早版本的 MongoDB 驱动程序是:package/mongo 要安装它,我们需要使用:
sudo apt-get install php-pear php5-dev sudo pecl install mongo
从 PHP 7 开始,这是新的驱动程序包/mongodb,要安装它请使用:
sudo pecl install mongodb
如果你正在使用 Laravel 框架或带有 Composer 的项目,那么这个库是最合适的: https://github.com/jenssegers/Laravel-MongoDB 使用版本 3.0.0 来获取 PHP 7 和 Laravel 5 支持,否则使用旧版本 2.2.2 Composer 命令:
composer require jenssegers/mongodb
如果您正在使用没有 Composer 的其他 PHP 框架,请使用此库:https://github.com/mongodb/mongo-php-library上面提到的库中也有用到