在 ServBay 中启用和使用 MongoDB (PHP 扩展及数据库服务)
ServBay 是一款专为开发者设计的强大本地 Web 开发环境,它不仅集成了多种 Web 服务器、编程语言和数据库,还预置了许多常用的语言扩展和工具。对于需要使用 MongoDB 数据库的 PHP 开发者而言,ServBay 提供了便捷的方式来启用 PHP 的 MongoDB 扩展并运行 MongoDB 数据库服务。
本文将详细介绍如何在 ServBay 中启用 PHP 的 MongoDB 扩展,启动 MongoDB 数据库服务,并演示如何在 PHP 项目中连接和使用 MongoDB。
概述:ServBay 与 MongoDB
MongoDB 是一款高性能、开源、面向文档的 NoSQL 数据库,因其灵活的数据模型和良好的可伸缩性而在现代 Web 应用中得到广泛应用。
ServBay 将 MongoDB 作为其内置的软件包之一,允许开发者在本地环境中轻松部署和管理 MongoDB 数据库实例。同时,ServBay 也为不同版本的 PHP 预编译并打包了相应的 MongoDB 扩展(mongodb.so
),使得 PHP 应用能够与 MongoDB 数据库进行交互。
要在 PHP 项目中使用 MongoDB,你需要完成两个主要步骤:
- 启用 PHP 的 MongoDB 扩展:这允许 PHP 代码调用 MongoDB 相关的函数。
- 启动 MongoDB 数据库服务:这是运行中的 MongoDB 数据库实例,用于存储和管理数据。
ServBay 的图形用户界面 (GUI) 简化了这两个步骤的操作。
PHP MongoDB 扩展版本
ServBay 为其支持的多个 PHP 版本提供了相应的 MongoDB 扩展。具体的扩展版本可能随 ServBay 的更新而变化,但通常会提供与 PHP 版本兼容的稳定版本。以下是 ServBay 中常见的 PHP 版本对应的 MongoDB 扩展版本(请以实际 ServBay 版本为准):
- PHP 5.6、7.0: MongoDB 1.7.5
- PHP 7.1、7.2、7.3、7.4: MongoDB 1.11.1
- PHP 8.0、8.1、8.2、8.3: MongoDB 1.15.0
- PHP 8.4: MongoDB 1.19.1
请注意,PHP 扩展(mongodb.so
)仅仅是提供了 PHP 与 MongoDB 通信的能力。在 PHP 代码中实际与 MongoDB 数据库进行交互通常需要通过官方的 MongoDB PHP 驱动,这个驱动通常通过 Composer 进行安装。
启用 PHP MongoDB 扩展
默认情况下,为了保持环境的精简,ServBay 的部分 PHP 扩展可能未启用。启用 MongoDB 扩展的推荐方式是通过 ServBay GUI。
通过 ServBay GUI 启用
这是最简单快捷的方法:
- 打开 ServBay 应用。
- 在左侧导航栏中,点击 语言 (Languages),然后选择 PHP。
- 选择你想要启用 MongoDB 扩展的 PHP 版本(例如,
PHP 8.4
)。 - 在右侧的面板中,找到 扩展 (Extensions) 部分。
- 向下滚动找到
MongoDB
扩展。 - 点击
MongoDB
扩展左侧的开关,将其状态从灰色(禁用)切换到绿色(启用)。 - 点击面板底部的 保存 (Save) 按钮。
ServBay 会自动为你修改相应的 PHP 配置文件并重启受影响的 PHP 服务,使更改生效。
手动编辑配置文件 (可选)
如果你更倾向于手动配置,或者需要进行更高级的设置,可以直接编辑 PHP 的配置文件。请注意,通过 GUI 操作通常已经足够。
定位到对应 PHP 版本的
conf.d
目录。例如,要为 PHP 8.3 启用 MongoDB 扩展,对应的文件路径通常是:bash/Applications/ServBay/etc/php/8.3/conf.d/mongodb.ini
1请根据你 ServBay 的安装路径和 PHP 版本调整上述路径。
使用文本编辑器打开
mongodb.ini
文件。找到以下行:
ini[MongoDB] ; Uncomment the following line to enable MongoDB ;extension = mongodb.so
1
2
3移除
extension = mongodb.so
行前面的分号;
,取消其注释:ini[MongoDB] ; Uncomment the following line to enable MongoDB extension = mongodb.so
1
2
3保存文件。
重要: 手动修改配置文件后,你需要手动重启对应的 PHP 服务才能使更改生效。在 ServBay GUI 中,点击左侧导航栏的 软件包 (Packages),找到你修改的 PHP 版本,点击其右侧的重启按钮(通常是一个圆形的箭头图标)。
启动 MongoDB 数据库服务
启用 PHP 扩展仅允许 PHP 代码与 MongoDB“对话”,但你还需要一个正在运行的 MongoDB 数据库实例来存储和处理数据。ServBay 也将 MongoDB 数据库作为软件包提供,你可以通过 GUI 轻松启动它。
- 打开 ServBay 应用。
- 在左侧导航栏中,点击 软件包 (Packages)。
- 在软件包列表中,找到 数据库 (Databases) 分类。
- 找到
MongoDB
软件包。 - 点击
MongoDB
软件包左侧的开关,将其状态从灰色(停止)切换到绿色(运行)。
MongoDB 数据库服务将在默认端口 27017
上启动。
验证 MongoDB 模块和数据库连接
完成上述步骤后,你可以通过以下方法验证 PHP MongoDB 扩展是否成功加载以及 MongoDB 数据库服务是否正常运行。
验证 PHP 扩展是否加载
创建一个简单的 PHP 文件来检查 phpinfo()
输出:
- 在你的 ServBay 网站根目录(例如
/Applications/ServBay/www
)下创建一个新的 PHP 文件,比如phpinfo.php
。 - 在文件中添加以下内容:php
<?php phpinfo(); ?>
1
2
3 - 通过浏览器访问该文件,例如
https://servbay.demo/phpinfo.php
(假设servbay.demo
是你配置的一个指向 ServBaywww
目录的网站)。 - 在打开的
phpinfo
页面中,搜索 "MongoDB"。如果成功加载,你应该能看到一个名为 "mongodb" 的部分,其中包含扩展的版本信息和配置详情。
(请注意:截图可能与你的 ServBay 版本或界面略有差异)
验证数据库连接
创建一个简单的 PHP 脚本来尝试连接到本地运行的 MongoDB 数据库:
- 确保你已经通过 Composer 在你的项目中安装了官方的 MongoDB PHP 驱动。如果还没有,进入你的项目目录并在终端运行:bash
composer require mongodb/mongodb
1 - 在你的项目中创建一个 PHP 文件,例如
test_mongodb.php
。 - 添加以下代码:php
<?php require __DIR__ . '/vendor/autoload.php'; // 根据你的项目结构调整路径 echo "Attempting to connect to MongoDB...\n"; try { // 连接到本地运行的 MongoDB 实例,默认端口 27017 $client = new MongoDB\Client("mongodb://localhost:27017"); // 尝试列出数据库,验证连接是否成功 $listDatabases = $client->listDatabases(); echo "Successfully connected to MongoDB!\n"; echo "Available databases:\n"; foreach ($listDatabases as $databaseInfo) { echo "- " . $databaseInfo->getName() . "\n"; } } catch (\MongoDB\Driver\Exception\Exception $e) { echo "Failed to connect to MongoDB: " . $e->getMessage() . "\n"; } ?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 - 通过终端运行此脚本(使用 ServBay 中对应的 PHP 版本)或通过 Web 访问该文件。如果连接成功,你将看到成功的提示和数据库列表。如果失败,错误消息将帮助你诊断问题(例如,MongoDB 服务未运行)。
在 PHP 代码中使用 MongoDB
一旦 PHP MongoDB 扩展已启用且 MongoDB 数据库服务正在运行,你就可以在 PHP 项目中使用通过 Composer 安装的 MongoDB PHP 驱动来执行各种数据库操作了。
安装 MongoDB PHP 驱动
如前所述,使用 Composer 安装官方驱动是推荐的方式:
composer require mongodb/mongodb
这将安装 mongodb/mongodb
包及其依赖项,并生成 vendor/autoload.php
文件。
代码示例
以下是一个简单的示例,演示如何连接到 MongoDB,插入文档,并查询文档:
<?php
require __DIR__ . '/vendor/autoload.php'; // 确保引入 Composer 自动加载文件
echo "Connecting to MongoDB...\n";
try {
// 连接到本地运行的 MongoDB 实例
$client = new MongoDB\Client("mongodb://localhost:27017");
// 选择数据库和集合
// 如果数据库或集合不存在,MongoDB 会在第一次写入数据时自动创建
$collection = $client->servbay_demo_db->users; // 使用 servbay_demo_db 作为示例数据库名
echo "Connected. Performing operations...\n";
// 插入文档
$insertResult = $collection->insertOne([
'name' => 'Alice ServBay', // 示例数据包含品牌名
'email' => '[email protected]',
'age' => 30,
'createdAt' => new MongoDB\BSON\UTCDateTime(time() * 1000) // 使用 BSON 日期类型
]);
printf("Inserted document with ID: %s\n", $insertResult->getInsertedId());
// 查询文档
$document = $collection->findOne(['name' => 'Alice ServBay']);
echo "Found document:\n";
if ($document) {
print_r($document);
} else {
echo "Document not found.\n";
}
// 更新文档 (可选)
$updateResult = $collection->updateOne(
['name' => 'Alice ServBay'],
['$set' => ['age' => 31, 'status' => 'updated']]
);
printf("Matched %d document(s) for update, modified %d document(s).\n", $updateResult->getMatchedCount(), $updateResult->getModifiedCount());
// 查询更新后的文档 (可选)
$updatedDocument = $collection->findOne(['name' => 'Alice ServBay']);
echo "Updated document:\n";
if ($updatedDocument) {
print_r($updatedDocument);
}
// 删除文档 (可选)
// $deleteResult = $collection->deleteOne(['name' => 'Alice ServBay']);
// printf("Deleted %d document(s).\n", $deleteResult->getDeletedCount());
} catch (\MongoDB\Driver\Exception\Exception $e) {
echo "An error occurred: " . $e->getMessage() . "\n";
} catch (\Exception $e) {
echo "An unexpected error occurred: " . $e->getMessage() . "\n";
}
echo "Script finished.\n";
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
将此代码保存为 PHP 文件,然后在终端中使用 ServBay 的 PHP CLI 运行,或者通过 ServBay 配置的 Web 服务器访问它。
注意事项和最佳实践
- MongoDB 服务状态: 务必确保 ServBay GUI 中 MongoDB 软件包的状态是“运行中”才能连接。
- 默认端口: MongoDB 默认运行在
27017
端口。如果你的应用需要连接到其他端口,请在连接字符串中指定。ServBay GUI 中通常可以查看或修改软件包的端口配置。 - 扩展 vs. 驱动: PHP
mongodb.so
扩展提供了底层通信能力,而mongodb/mongodb
Composer 包提供了更高级、面向对象的 API 来执行数据库操作。大多数现代 PHP 应用都会使用 Composer 包。 - ServBay User CA/Public CA: ServBay 支持使用其内置的 CA 签发 SSL 证书。对于本地开发,这有助于模拟生产环境的 HTTPS 连接。虽然直接连接本地 MongoDB 通常不需要 SSL,但在某些更复杂的配置中可能需要考虑。ServBay 也支持 ACME 协议申请真实证书,以及数据备份和数据库密码重置等功能,这些都是 ServBay 作为全面开发环境的优势体现。
- 数据库管理工具: ServBay 可能不包含 MongoDB 的图形化管理工具,但你可以下载官方的 MongoDB Compass 或使用命令行工具
mongo
/mongosh
来管理本地 ServBay 运行的 MongoDB 实例。
常见问题解答 (FAQ)
Q: 我启用了 PHP MongoDB 扩展,但 PHP 脚本还是连接不上 MongoDB,怎么办? A: 请确认你已经通过 ServBay GUI 启动了 MongoDB 数据库服务。PHP 扩展只是接口,数据库服务才是实际运行的数据库实例。同时,检查连接字符串是否正确(通常是 mongodb://localhost:27017
)。
Q: mongodb.so
扩展和 mongodb/mongodb
Composer 包有什么区别? A: mongodb.so
是 PHP 引擎加载的底层扩展,提供了 PHP 语言与 MongoDB C 驱动 (libmongoc) 通信的能力。mongodb/mongodb
Composer 包是基于此扩展构建的 PHP 库,提供了更易于使用的面向对象 API 来执行 CRUD 操作、聚合等。在现代 PHP 开发中,你通常需要同时启用扩展并安装 Composer 包。
Q: 如何修改 MongoDB 的端口或配置? A: 你可以通过 ServBay GUI 查看 MongoDB 软件包的配置选项,通常包括端口设置。更高级的配置可能需要编辑 MongoDB 的配置文件,其路径可以在 ServBay 的软件包详情中找到。修改后需要重启 MongoDB 服务。
总结
ServBay 为 PHP 开发者提供了极其便利的 MongoDB 开发环境。通过 ServBay 直观的 GUI,你可以轻松地启用 PHP 的 MongoDB 扩展并启动 MongoDB 数据库服务。结合 Composer 安装的官方 PHP 驱动,你可以快速搭建起本地的 PHP + MongoDB 开发环境,专注于构建你的应用逻辑。ServBay 的集成能力大大简化了环境配置的复杂性,让你更高效地进行本地开发和测试。