升级PHP到7.0版本后,为什么不能使用mongodb驱动?

升级PHP到7.0版本后,为什么不能使用mongodb驱动?

嗯,我发现了一个奇怪的情况。我在一个项目中同时使用了 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
  • 似乎配置正确,并且 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上面提到的库中也有用到

相关内容