【问题标题】:Upgrading from MongoDB 2.4 to 2.6 Class not found未找到从 MongoDB 2.4 升级到 2.6 的类
【发布时间】:2019-01-13 23:52:21
【问题描述】:

我有一个项目正在更新基于 Zend Framework 1.12 和 MongoDB 2.4 构建的非常旧的应用程序。最近 PHP 升级到 5.6 现在又升级了 请求到 MongoDB 2.6。服务器也很旧(Redhat 6.9) 我没有准备升级到更高版本的服务器操作系统。 MongoDB 位于单独的服务器上(与应用程序文件不同)。

这是我到目前为止所做的:

  • 建立了一个基于 GUI 的虚拟机(Windows 10 主机、Centos 7 来宾、PHP 5.6 和 mongo 相同)。 安装 MongoDB 大部分都很顺利,除了 MongoDB PHP 驱动程序。 应用程序代码抛出“找不到类 Mongo”错误,因为旧代码库是通过 new Mongo($connStr) 实例化的,即使尝试 new MongoClient() 也不起作用(给出了相同的类未找到错误)。 mongodb.so 文件放置在适当的位置,并通过 /etc/php.ini 文件正确提及 关于 extension_dir 和 extension=mongodb.so。 使用 phpinfo() 我验证了扩展 mongodb.so 加载正确,但也许 编译了错误的 PHP 驱动程序。 我无法获得高于 1.12 的已安装驱动程序版本,这可能是由于 编译驱动程序的各种尝试。

  • 试图重用复制了相同应用程序结构的 Vagrant & Virtualbox VM,但遗憾的是我的操作系统 (Solus) 不再启动此 VM,它拒绝像几个月前那样挂载文件夹。所以这也是一个死胡同。我回来了 到 Windows 作为主机 GUI VM...不断尝试不同的建议,但没有更进一步。

我已经对此进行了大量研究,但可以使用一些社区指导。 也许最好的方法是将 MongoDB 从 VM 中完全清除并重试?既然是7以下的PHP,可能是我安装错了.. php-driver for mogodb wont't compile

此链接MongoDB 2.6 Update Error 讨论了删除。

期望的结果是 PHP 5.6.33 与 Zend Framework 1.12 和 MongoDB 2.6.latest

希望应用程序中的重新编码量最少,但此时 我没有独立的 PHP 脚本(在 Zend 应用程序之外)连接到测试 DB/Collection 上的 MongoDB。

我已经预算了足够的时间来修复代码,但现在我正在旋转。

任何帮助/建议表示赞赏。提前致谢。

【问题讨论】:

  • 这里只是一个更新,我完全清除了所有 mongo 和 mongodb 文件等等。在使用 pecl install mongo(不是 pecl install mongodb)时,我注意到有一个 SSL 错误阻止了正确的编译。通过安装缺少的库解决了它,然后再次运行 pecl install mongo 并获得了预期的结果。
  • 您可以添加解决方案作为您自己问题的答案并接受它。

标签: mongodb zend-framework redhat php-5.6


【解决方案1】:
  • 我意识到我做错了什么。我从 Github 编译(失败)了一个用于 PHP7 的驱动程序版本(不是 5.6),结果它安装了 mongodb.so - 所以它必须被清除。
  • 在清除 mongodb 之后,我重新安装了 mongo 服务器,但对于 PHP 驱动程序,我决定使用 Pecl。
  • 在编译驱动程序时,由于缺少 SSL 库而发生错误。你会 想要检查您是否拥有以下库(您可能已经拥有 他们),如果没有,那么

sudo yum install libcurl4-openssl-dev sudo yum install openssl-dev sudo yum install libssl-dev sudo yum install libsslcommon2-dev sudo yum install pkg-config 然后...一旦完成所有操作

sudo pecl install mongo

  • 编译完成后(没有错误),我注意到它已经创建了驱动程序 mongo.so 并将其放置在目录 /usr/lib64/php/modules 中,这很好。
  • 按照建议,确保 extension=mongo.so 已添加到 /etc/php.ini
  • 重新启动 Apache 服务器,并检查 phpinfo(); 中的 mongo 支持和版本号
  • 在命令行中,您可以执行以下操作来验证.. php --ri mongo 查看安装了哪个mongo php驱动。它可能会打印...

mongo Mongo Support => enabled Version => 1.6.16 SSL Support => enabled

要查看已安装的 mongodb 版本,请键入 mongod --version,这可能会打印...

db version v2.6.12

  • 如果您没有重新安装 mongodb 服务器 (mongod),请安装并运行它(或者如果您使用 mongo 连接到外部服务器,请尝试使用独立测试脚本或您的应用程序连接到 Mongo李>

【讨论】:

  • 前段时间我遇到了类似的问题,在我自己的问题和答案档案中挖掘,我发现了一些可以帮助你的东西stackoverflow.com/questions/29082370/… 并面临类似的 mongo php 驱动程序问题。有点有趣我忘了我遇到过类似的问题。无论哪种方式,我希望它可以帮助任何人摆脱困境。
猜你喜欢
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多