尝试在 php 中使用 Windows 上的 MAMP 安装 mongodb


Trying to install mongodb in php with MAMP on Windows

我正在尝试使用 MAMP 5.6.0 在 php 5.6.0 中安装 mongo。

我已经正确下载了 mongo 库并将其添加到我的 php.ini 中。

extension=php_mongo-1.5.7-5.6-vc11.dll

当我从命令行运行php时,我收到以下内容(mongo工作):

C:'MAMP'bin'php'php5.6.0>php -c ..'..'..'conf'php5.6.0'php.ini -i | findstr /R /C:"mongo"
mongo
mongo.allow_empty_keys => 0 => 0
mongo.chunk_size => 261120 => 261120
mongo.cmd => $ => $
mongo.default_host => localhost => localhost
mongo.default_port => 27017 => 27017
mongo.is_master_interval => 15 => 15
mongo.long_as_object => 0 => 0
mongo.native_long => 0 => 0
mongo.ping_interval => 5 => 5

但是,当我使用 errors_on 启动 MAMP 时,我收到以下内容:

PHP 启动:无法加载动态库 'C:''MAMP''bin''php''php5.6.0''ext''php_mongo-1.5.7-5.6-vc11.dll' - %1 不是有效的 Win32 应用程序。

我做错了什么?

在Windows下,您必须使用线程安全版本。否则无法加载模块。您应该查看该模块的 PHP 版本 5.6 和扩展文件名中的 ts

但我认为您的问题是您使用 64 位版本。包中有一个名为:

php_mongo-1.5.7-5.6-VC11-x86_64.dll 应该可以工作。

https://s3.amazonaws.com/drivers.mongodb.org/php/index.html

我最终通过降低 php 和 mongo 驱动程序来解决这个问题,直到我找到一个可以很好地协同使用的驱动程序。我正在使用带有 mongo 驱动程序 php_mongo-1.4.5-5.5-vc11.dll 的 php 5.5.12。

我不认为这与 MAMP 本身有任何关系,更多的是让 apache 玩 php 和 mongo。

在这个问题上挣扎了很多之后,我终于找到了如何做到这一点:

  1. 在您的环境中找到系统使用的真实 php.ini 位置。为此,请使用phpinfo()创建一个页面并在浏览器上读取它,在那里您可以找到php.ini配置的位置,在我的环境中在C:''Windows下
  2. 在管理员模式下打开 php.ini 文件并对其进行编辑,如果不存在,则添加有关扩展的 mongo 信息:即:扩展名=php_mongodb.dll确保您输入正确(下划线、"mongodb"等);而不是全部保存。
  3. 在同一文件中查找extension_dir,即当前 PHP 安装使用的扩展目录。在我的环境中,它是C:''MAMP''bin''php''php7.3.19''ext。现在去那里,这是您必须复制通过正确的dll的文件夹
  4. https://pecl.php.net/package/mongodb 转到此处并找到适合您环境的正确版本,这意味着您必须知道您是在 x86 还是 x64 上运行(查看系统信息)以及您的配置是否使用线程安全(在 cmd php -i|findstr "线程"上运行)。在我的配置中,它是x64和TS.....现在这就是重点:在该链接下,您会发现很多版本,即 1.12.0 或 1.7.1 等,您必须打开子链接并在页面底部查看打开的子链接是否与您的 php 版本兼容(即:7.3)但无论如何您都必须对这些 dll 版本进行一些尝试, 就我而言,我发现 1.8.0 与 PHP 7.3 兼容,我将其复制到第 3 点的 ext 文件夹中)但没有任何效果,所以我需要找到一个始终与我的 PHP 7.3 兼容的次要版本。所以对于 php 7.3 至少有 3 个 dll 版本(1.8、1.7、1.6 等......我在 dll 1.6 上取得了成功......所以 MAMP 需要为您的系统找到合适的......一旦我在 ext 目录中放置了正确的文件并通过 MAMP 界面重新启动 Apache,phpinfo 就会吐出 mongo 被识别的通知!!

所以诀窍就是为PHP版本尝试正确的dll,直到它匹配!