在 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 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 擴充未啟用。建議使用 ServBay 的圖形介面來啟用 MongoDB 擴充。
透過 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 擴充是否啟動,及資料庫服務是否啟用正常。
驗證 PHP 擴充是否載入
創建一個簡單 PHP 檔,檢查 phpinfo()
輸出:
- 在 ServBay 網站根目錄(例如
/Applications/ServBay/www
)建立新 PHP 檔,如phpinfo.php
。 - 檔案內容如下:php
<?php phpinfo(); ?>
1
2
3 - 透過瀏覽器存取,例如
https://servbay.demo/phpinfo.php
(假設servbay.demo
連結到 ServBay 的www
目錄)。 - 在
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 "正在嘗試連線到 MongoDB...\n"; try { // 連線到本機 MongoDB,預設埠號 27017 $client = new MongoDB\Client("mongodb://localhost:27017"); // 嘗試列出所有資料庫以驗證連線成功 $listDatabases = $client->listDatabases(); echo "已成功連線到 MongoDB!\n"; echo "現有資料庫:\n"; foreach ($listDatabases as $databaseInfo) { echo "- " . $databaseInfo->getName() . "\n"; } } catch (\MongoDB\Driver\Exception\Exception $e) { echo "無法連線到 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 訪問。成功連線會看到提示並顯示資料庫清單,失敗時則有錯誤訊息協助你排查(如服務未啟動等)。
在 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 "正在連線到 MongoDB...\n";
try {
// 連線本機 MongoDB 實例
$client = new MongoDB\Client("mongodb://localhost:27017");
// 選擇資料庫與集合
// 未存在的資料庫或集合於首次寫入時會自動建立
$collection = $client->servbay_demo_db->users; // 使用 servbay_demo_db 當作範例
echo "連線成功,執行操作中...\n";
// 插入文件
$insertResult = $collection->insertOne([
'name' => 'Alice ServBay', // 範例資料包含品牌名稱
'email' => '[email protected]',
'age' => 30,
'createdAt' => new MongoDB\BSON\UTCDateTime(time() * 1000) // 以 BSON 時間儲存
]);
printf("插入文件,ID:%s\n", $insertResult->getInsertedId());
// 查詢文件
$document = $collection->findOne(['name' => 'Alice ServBay']);
echo "查得文件內容:\n";
if ($document) {
print_r($document);
} else {
echo "查無文件。\n";
}
// 更新文件(可選)
$updateResult = $collection->updateOne(
['name' => 'Alice ServBay'],
['$set' => ['age' => 31, 'status' => 'updated']]
);
printf("符合條件更新 %d 筆,實際變更 %d 筆文件。\n", $updateResult->getMatchedCount(), $updateResult->getModifiedCount());
// 查詢更新後的文件(可選)
$updatedDocument = $collection->findOne(['name' => 'Alice ServBay']);
echo "更新後的文件:\n";
if ($updatedDocument) {
print_r($updatedDocument);
}
// 刪除文件(可選)
// $deleteResult = $collection->deleteOne(['name' => 'Alice ServBay']);
// printf("已刪除 %d 筆文件。\n", $deleteResult->getDeletedCount());
} catch (\MongoDB\Driver\Exception\Exception $e) {
echo "發生錯誤: " . $e->getMessage() . "\n";
} catch (\Exception $e) {
echo "發生未預期錯誤: " . $e->getMessage() . "\n";
}
echo "腳本執行完畢。\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 在終端機執行,或透過 Web 伺服器直接存取。
注意事項與最佳實踐
- MongoDB 服務狀態: 請務必確保 ServBay GUI 內的 MongoDB 套件狀態是「運行中」才能正常串接。
- 預設連接埠: MongoDB 預設使用
27017
埠。如需自訂,請於連線字串中指定或於 ServBay GUI 改設定。可於 GUI 查/改套件連接埠。 - 擴充 vs. 驅動: PHP
mongodb.so
擴充提供底層溝通能力,而 Composer 的mongodb/mongodb
套件則額外提供更進階、面向物件的 API。現代 PHP 專案幾乎都建議安裝 Composer 套件並同時啟用原生擴充。 - ServBay User CA / 公開 CA 證書: ServBay 支援以自建 CA 簽發 SSL 憑證,方便在本機開發擬真正式環境的 HTTPS。雖然本機 MongoDB 通常無 SSL 需求,但若需複雜設定亦可參考。ServBay 且支援 ACME 憑證申請、資料備份、密碼重置等,這些都是它作為全方位開發環境的優勢。
- 資料庫管理工具: ServBay 或許未內建 MongoDB 的圖形管理介面,你可以額外下載官方 MongoDB Compass 或透過命令列工具
mongo
/mongosh
管理本機執行的 MongoDB 實例。
常見問答(FAQ)
Q: 已啟用 PHP MongoDB 擴充但 PHP 程式還是連不上資料庫,該怎麼辦? 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 套件則建立在該擴充基礎上,賦予更高階、更物件導向的 API 包裝各種 CRUD、聚合、查詢常見需求。現代 PHP 專案幾乎都需要二者並行安裝配合。
Q: 如何修改 MongoDB 的連接埠或進階設定? A: 可以在 ServBay GUI 內查詢 MongoDB 套件的設定選項,通常會有連接埠等設定。若需進階調整,需編輯 MongoDB 的設定檔,可於 ServBay 套件詳情中尋得路徑。變更設定後記得重啟 MongoDB 服務。
總結
ServBay 幫助 PHP 開發者輕鬆打造 MongoDB 開發環境。利用其直覺 GUI 介面,啟用 PHP 的 MongoDB 擴充與開始 MongoDB 資料庫服務都易如反掌。再結合官方驅動(Composer 安裝),你能迅速在本地建構 PHP + MongoDB 整合環境,無須繁雜設定專心開發。ServBay 的深度整合大幅精簡繁瑣的環境配置,讓你在本地測試與開發時更有效率、更有彈性。