Mongo 不会在启用 error_reporting 的情况下加载 phpinfo

Posted

技术标签:

【中文标题】Mongo 不会在启用 error_reporting 的情况下加载 phpinfo【英文标题】:Mongo will not load in phpinfo with error_reporting enabled 【发布时间】:2013-02-03 15:46:03 【问题描述】:

我已经尝试让 Mongo 在 Ubuntu Server 12.04 上使用 Apache2 在 php 5.3 上工作几个小时了。

它给出了错误:

Fatal error: Class 'MongoClient' not found in /var/www/projects/learn/create.php on line 7

Mongo 出现在 php -m 中,但没有出现在 phpinfo() 中。经过很长时间的搜索,我尝试在php.ini 中评论以下内容:

Default Value: E_ALL & ~E_NOTICE

这会导致 Mongo 出现在我的 phpinfo() 语句中,并且 $m = new MongoClient() 不会引发任何错误。唯一的问题是我需要打开错误报告(因为我是新开发人员)。

仅当启用详细错误报告时,可能导致 Mongo 无法加载的原因是什么?

编辑:还需要注意的是我在单个 PHP 文件中打开了错误报告,它正确显示了任何错误,同时仍然让 Mongo 加载

【问题讨论】:

我对您在 php.ini 中评论 Default Value: E_ALL & ~E_NOTICE 的意思有点困惑。这行应该总是被注释掉,因为它是一个注释。它也与Mongo是否会加载无关。 php -m 是命令行,因此您可能在网络服务器下运行 phpinfo()。不同的 .ini 文件,因此可能没有将 mongo 的内容加载到 web 服务器的 php 副本正在查看的任何 .ini(s) 中。 phpinfo() 会告诉你正在加载哪些文件。 由于某种原因,默认情况下我的安装中未注释此值 - 我猜这会在 php.ini 到达扩展行之前停止加载。也许我需要看看我的 php.ini 语法 - 谢谢! @wcpyro 听起来是个好主意。您可能还想将其恢复为默认值。您可以通过清除 php5 包并重新安装它来做到这一点(或者尝试在 Internet 上的某个位置找到与您的操作系统匹配的默认 php.ini 文件并希望获得最好的结果)。 【参考方案1】:

mongo 扩展很可能没有安装在您的开发/服务器设置中。首先检查是否安装。创建一个名为 phpinfo.php 的文件,内容如下:

从浏览器运行它。搜索蒙哥。看看是什么版本。如果它不存在,请从命令行执行以下操作:

sudo pecl 安装 mongo

如果你有 ubuntu 桌面 sudo gedit /etc/php5/conf.d/mongo.ini

如果你有 ubuntu 服务器 须藤 vi /etc/php5/conf.d/mongo.ini

在文件中插入以下行: extension=mongo.so

保存文件。出口。使用 sudo /etc/init.d/apache2 restart 重启 apache

永远不要直接编辑 php.ini 文件以在 ubuntu 中加载/卸载扩展。在 /etc/php5/conf.d/ 中的文件中进行更改

【讨论】:

以上是关于Mongo 不会在启用 error_reporting 的情况下加载 phpinfo的主要内容,如果未能解决你的问题,请参考以下文章

mongo和mongod的区别

MongoDB 5.0 复制:Mongo::Error::NoServerAvailable

具有默认值上下文过滤器的 Drupal 7 视图块不会在页面上过滤(Mongo)

为啥 docker-compose 不会为 mongo 打开端口?

MongoDB未授权漏洞

mongo 查询不会触发复合索引