使用 php_mongodb 扩展名将 MongoDB 连接到 PHP 时出现错误和警告
Error and warning connecting MongoDB to PHP using php_mongodb extension
我在 Windows 10 上安装了 MongoDB PHP 驱动程序(我使用的是配备 PHP 5.6.25 的 WAMP。按照我在 http://php.net/manual/en/mongodb.installation.windows.php and I installed also the libbson and libmongoc libraries (requested as requirements) as written at http://php.net/manual/en/mongodb.requirements.php.
然后,我将 MongoDB、libbson 和 libmongoc 的 bin 文件夹添加到系统路径。
但是,即使我可以在 WAMP 的扩展列表中看到 php_mongodb 扩展,启动 phpinfo() mongo 扩展也不会与其他扩展一起出现。
此外,尝试使用
连接到我的数据库
<?php
$mongo=new MongoClient("");
$db=$mongo->galileo;
$collection= $db->items;
print_r("Number of documens: "); ?>
我收到错误
Fatal error: Class 'MongoClient' not found in C:\wamp64\www\galileo\index.php >on line 21
乍一看,阅读此错误,似乎 PHP 正在不正确的文件夹中寻找 php_mongodb 扩展名,即 C:\wamp64\www\galileo\index .php(放置我的项目的索引页的位置)而不是正确的 C:\wamp64\bin\php\php5.6.25\ext 所有扩展名所在的位置。
但是,查看 php 日志文件 php_error.log 我还发现一条警告说:
PHP Warning: PHP Startup: Unable to load dynamic library 'c:/wamp64/bin/php/php5.6.25/ext/php_mongodb.dll' - Il sistema operativo non pu� eseguire %1.
in Unknown on line 0.
(对于不会说意大利语的人,- 后面的短语表示 操作系统无法执行 %1,即使我无法想象 % 1代表).
即使使用新的 class MongoDB\Driver\Manager 我也得到错误
Fatal error: Class 'MongoDB\Driver\Manager' not found in C:\wamp64\www\galileo\index.php on line 21
和同样的警告。
您是否注意到我描述的安装过程中的一些错误或遗忘,如果没有,您知道如何解决问题吗?
您不应再使用 'MongoClient class',定义此 class 的扩展已弃用。看看 here。
相反,您应该使用 MongoDB\Driver\Manager class。请阅读 http://php.net/manual/en/class.mongodb-driver-manager.php.
并且在 php 中的设置必须是这样的:
$mongo = new MongoDB\Driver\Manager("mongodb://localhost:27017");
如果您仍然使用旧的 class;您需要安装旧的遗留扩展 (pecl install mongo) 并使用 PHP 5.x,或者更新您的代码以使用此新驱动程序的 classes 作为旧驱动程序不适用于 PHP 7。here 上有升级指南。
最后一部分来自 derickr 在本期 github 上的回答:https://github.com/mongodb/mongo-php-driver/issues/300
这个问题肯定与WAMP有关,我认为与他的文件夹中的多个php.ini有关。其实在apache文件夹下可以找到一个php.ini文件,不能修改,否则根本不起作用;同时,对 php 文件夹中的 php.ini 文件所做的任何更改似乎都没有效果,除了在扩展中显示 mongodb 扩展名列表。
因此,我尝试使用 XAMPP,正如 video tutorial 中所建议的那样,它起作用了。使用 Composer 我还可以安装 PHP 库,而不仅仅是驱动程序。
我在 Windows 10 上安装了 MongoDB PHP 驱动程序(我使用的是配备 PHP 5.6.25 的 WAMP。按照我在 http://php.net/manual/en/mongodb.installation.windows.php and I installed also the libbson and libmongoc libraries (requested as requirements) as written at http://php.net/manual/en/mongodb.requirements.php.
然后,我将 MongoDB、libbson 和 libmongoc 的 bin 文件夹添加到系统路径。
但是,即使我可以在 WAMP 的扩展列表中看到 php_mongodb 扩展,启动 phpinfo() mongo 扩展也不会与其他扩展一起出现。
此外,尝试使用
<?php
$mongo=new MongoClient("");
$db=$mongo->galileo;
$collection= $db->items;
print_r("Number of documens: "); ?>
我收到错误
Fatal error: Class 'MongoClient' not found in C:\wamp64\www\galileo\index.php >on line 21
乍一看,阅读此错误,似乎 PHP 正在不正确的文件夹中寻找 php_mongodb 扩展名,即 C:\wamp64\www\galileo\index .php(放置我的项目的索引页的位置)而不是正确的 C:\wamp64\bin\php\php5.6.25\ext 所有扩展名所在的位置。
但是,查看 php 日志文件 php_error.log 我还发现一条警告说:
PHP Warning: PHP Startup: Unable to load dynamic library 'c:/wamp64/bin/php/php5.6.25/ext/php_mongodb.dll' - Il sistema operativo non pu� eseguire %1. in Unknown on line 0.
(对于不会说意大利语的人,- 后面的短语表示 操作系统无法执行 %1,即使我无法想象 % 1代表).
即使使用新的 class MongoDB\Driver\Manager 我也得到错误
Fatal error: Class 'MongoDB\Driver\Manager' not found in C:\wamp64\www\galileo\index.php on line 21
和同样的警告。
您是否注意到我描述的安装过程中的一些错误或遗忘,如果没有,您知道如何解决问题吗?
您不应再使用 'MongoClient class',定义此 class 的扩展已弃用。看看 here。
相反,您应该使用 MongoDB\Driver\Manager class。请阅读 http://php.net/manual/en/class.mongodb-driver-manager.php.
并且在 php 中的设置必须是这样的:
$mongo = new MongoDB\Driver\Manager("mongodb://localhost:27017");
如果您仍然使用旧的 class;您需要安装旧的遗留扩展 (pecl install mongo) 并使用 PHP 5.x,或者更新您的代码以使用此新驱动程序的 classes 作为旧驱动程序不适用于 PHP 7。here 上有升级指南。
最后一部分来自 derickr 在本期 github 上的回答:https://github.com/mongodb/mongo-php-driver/issues/300
这个问题肯定与WAMP有关,我认为与他的文件夹中的多个php.ini有关。其实在apache文件夹下可以找到一个php.ini文件,不能修改,否则根本不起作用;同时,对 php 文件夹中的 php.ini 文件所做的任何更改似乎都没有效果,除了在扩展中显示 mongodb 扩展名列表。
因此,我尝试使用 XAMPP,正如 video tutorial 中所建议的那样,它起作用了。使用 Composer 我还可以安装 PHP 库,而不仅仅是驱动程序。