請注意,如果您傳送 socketTimeoutMs 值為 0 以停用逾時(根據 MongoDB 文件),它將被視為預設值,在 PHP 驅動程式中為 300,000 毫秒。因此,如果您需要停用限制,請傳送一個非常大的數值。
(mongodb >=1.0.0)
MongoDB\Driver\Manager::__construct — 建立新的 MongoDB 管理器
$uri
= null
, ?array $uriOptions
= null
, ?array $driverOptions
= null
)使用指定的選項建構新的 MongoDB\Driver\Manager 物件。
注意: 根據 » 伺服器探索和監控規範,此建構子不執行任何 I/O。連線將在第一個操作執行時按需初始化。
注意: 當透過連線字串或
uriOptions
參數指定任何 SSL 或 TLS URI 選項時,擴充功能將會隱式啟用其連線的 TLS。若要避免這種情況,請明確停用tls
選項,或不要指定任何 TLS 選項。
注意: 在 Unix 平台上,擴充功能對使用 fork() 系統呼叫而不呼叫 exec() 的腳本很敏感。建議使用者不要在分叉的子程序中重複使用 MongoDB\Driver\Manager 實例。
uri
一個 » mongodb:// 連線 URI
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[defaultAuthDb][?options]]
如果未指定,則預設為 "mongodb://127.0.0.1:27017"
。
有關支援的 URI 選項的詳細資訊,請參閱 MongoDB 手冊中的 » 連線字串選項。由於擴充功能不實作連線池,因此不支援 » 連線池選項。
uri
是一個 URL,因此其組件中的任何特殊字元都需要根據 » RFC 3986 進行 URL 編碼。這對於使用者名稱和密碼尤其重要,它們通常可以包含特殊字元,例如 @
、:
或 %
。透過 Unix 網域插槽連線時,插槽路徑可能包含斜線等特殊字元,並且必須進行編碼。可以使用 rawurlencode() 函式對 URI 的組成部分進行編碼。
defaultAuthDb
組件可用於指定與使用者憑證相關聯的資料庫名稱;但是,如果指定了 authSource
URI 選項,則它會優先。如果未指定 defaultAuthDb
或 authSource
,則預設會使用 admin
資料庫。defaultAuthDb
組件在沒有使用者憑證的情況下無效。
uriOptions
額外的 » 連線字串選項,它會覆寫 uri
參數中具有相同名稱的任何選項。
選項 | 型別 | 說明 |
---|---|---|
appname | 字串 |
MongoDB 3.4+ 具有使用連線用戶端提供的中繼資料註解連線的功能。此中繼資料會在建立連線時包含在伺服器的記錄中,並且在啟用資料庫分析時也會記錄在慢速查詢記錄中。 此選項可用於指定應用程式名稱,該名稱將包含在中繼資料中。該值長度不能超過 128 個字元。 |
authMechanism | 字串 |
MongoDB 將用於驗證連線的驗證機制。有關其他詳細資訊和支援的值列表,請參閱 MongoDB 手冊中的 » 驗證選項。 |
authMechanismProperties | 陣列 |
所選驗證機制的屬性。有關其他詳細資訊和支援的屬性列表,請參閱 » 驅動程式驗證規範。
|
authSource | 字串 |
與使用者憑證相關聯的資料庫名稱。預設為連線 URI 的資料庫組件,如果兩者都未指定,則預設為 對於將憑證儲存委派給其他服務的驗證機制 (例如 GSSAPI),此值應為 |
canonicalizeHostname | bool |
如果為 此選項是 |
compressors | 字串 |
用戶端想要使用的優先順序、逗號分隔的壓縮器清單。僅當用戶端和伺服器共用任何通用壓縮器時,才會壓縮訊息,並且每個方向使用的壓縮器將取決於伺服器或驅動程式的個別組態。有關詳細資訊,請參閱 » 驅動程式壓縮規範。 |
connectTimeoutMS | int |
嘗試連線的逾時時間(以毫秒為單位)。預設值為 10,000 毫秒。 |
directConnection | bool |
當連線字串中僅提供單一主機時,可以使用此選項來控制複本集探索行為。預設情況下,在連線字串中提供單一成員將建立直接連線或探索其他成員,具體取決於是否省略或存在 |
gssapiServiceName | 字串 |
連線到 Kerberos 化 MongoDB 實例時,設定 Kerberos 服務名稱。此值必須符合 MongoDB 實例上設定的服務名稱 (即 » saslServiceName 伺服器參數)。預設值為 此選項是 |
heartbeatFrequencyMS | int |
指定驅動程式檢查 MongoDB 拓撲之間的時間間隔(以毫秒為單位),從上一次檢查結束到下一次檢查開始計算。預設值為 60,000 毫秒。 根據 » 伺服器探索和監控規範,此值不能小於 500 毫秒。 |
journal | bool |
對應於預設寫入關注的 |
loadBalanced | bool |
指定驅動程式是否透過負載平衡器連線到 MongoDB 叢集。如果為 |
localThresholdMS | int |
在解析讀取偏好設定時,從多個適合的 MongoDB 實例中選擇的延遲視窗大小(以毫秒為單位)。預設值為 15 毫秒。 |
maxStalenessSeconds | int |
對應於讀取偏好的 如果指定了,最大陳舊時間必須是一個大於或等於 |
密碼 | 字串 | 用於身份驗證的用戶密碼。如果密碼包含特殊字元,則此選項很有用,否則這些字元需要針對連線 URI 進行 URL 編碼。 |
readConcernLevel | 字串 | 對應於讀取關注的 level 參數。指定讀取隔離的層級。詳情請參閱 MongoDB\Driver\ReadConcern。 |
readPreference | 字串 |
對應於讀取偏好的 |
readPreferenceTags | 陣列 |
對應於讀取偏好的
|
replicaSet | 字串 |
指定副本集的名稱。 |
retryReads | bool |
指定驅動程式是否應自動重試因暫時性網路錯誤或副本集選舉而失敗的某些讀取操作。此功能需要 MongoDB 3.6+。預設值為 有關詳細資訊,請參閱 » 可重試讀取規格。 |
retryWrites | bool |
指定驅動程式是否應自動重試因暫時性網路錯誤或副本集選舉而失敗的某些寫入操作。此功能需要 MongoDB 3.6+。預設值為 有關詳細資訊,請參閱 MongoDB 手冊中的 » 可重試寫入。 |
safe | bool |
如果為 此選項已過時,不應使用。 |
serverSelectionTimeoutMS | int |
指定在拋出例外之前,阻止伺服器選擇的毫秒數。預設值為 30,000 毫秒。 |
serverSelectionTryOnce | bool |
當為 |
socketCheckIntervalMS | int |
如果最近未使用某個 Socket,驅動程式必須在使用它進行任何操作之前,透過 |
socketTimeoutMS | int |
在 Socket 上嘗試發送或接收的時間(以毫秒為單位),然後超時。預設值為 300,000 毫秒(即五分鐘)。 |
srvMaxHosts | int |
在初始填充種子列表時,或在 SRV 輪詢期間,將新主機新增到拓撲時,隨機選取 SRV 結果的最大數量。預設值為 |
srvServiceName | 字串 |
在初始 DNS 種子列表探索和 SRV 輪詢中用於 SRV 查閱的服務名稱。預設值為 |
ssl | bool |
如果為 此選項是 |
tls | bool | |
tlsAllowInvalidCertificates | bool |
指定當伺服器的 TLS 憑證無效時,驅動程式是否應產生錯誤。預設值為 警告
停用憑證驗證會產生漏洞。 |
tlsAllowInvalidHostnames | bool |
指定當伺服器的主機名稱與 TLS 憑證指定的主機名稱不符時,驅動程式是否應產生錯誤。預設值為 警告
停用憑證驗證會產生漏洞。允許無效的主機名稱可能會使驅動程式暴露於 » 中間人攻擊。 |
tlsCAFile | 字串 |
檔案的路徑,其中包含在建立 TLS 連線時要視為受信任的單個或一組憑證授權單位。預設會使用系統憑證存放區。 |
tlsCertificateKeyFile | 字串 |
用戶端憑證檔案或用戶端私鑰檔案的路徑;如果兩者都需要,則應將檔案串連在一起。 |
tlsCertificateKeyFilePassword | 字串 |
用於解密用戶端私鑰(即 |
tlsDisableCertificateRevocationCheck | bool | |
tlsDisableOCSPEndpointCheck | bool |
如果為 |
tlsInsecure | bool |
盡可能放寬 TLS 限制。為此選項指定 警告
停用憑證驗證會產生漏洞。允許無效的主機名稱可能會使驅動程式暴露於 » 中間人攻擊。 |
username | 字串 | 用於身份驗證的用戶名稱。如果用戶名稱包含特殊字元,則此選項很有用,否則這些字元需要針對連線 URI 進行 URL 編碼。 |
w | int|string |
對應於預設寫入關注的 |
wTimeoutMS | int|string |
對應於預設寫入關注的 如果指定了, |
zlibCompressionLevel | int |
指定用於 zlib 壓縮器的壓縮層級。如果 |
driverOptions
選項 | 型別 | 說明 | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
allow_invalid_hostname | bool |
如果為 允許無效的主機名稱可能會使驅動程式暴露於 » 中間人攻擊。 此選項是 |
||||||||||||||||||||||||||||||
autoEncryption | 陣列 |
提供選項來啟用自動用戶端欄位層級加密。
支援下列選項
|
||||||||||||||||||||||||||||||
ca_dir | 字串 |
正確雜湊憑證目錄的路徑。預設會使用系統憑證存放區。 |
||||||||||||||||||||||||||||||
ca_file | 字串 |
檔案的路徑,其中包含在建立 TLS 連線時要視為受信任的單個或一組憑證授權單位。預設會使用系統憑證存放區。 此選項是 |
||||||||||||||||||||||||||||||
context | resource |
若未指定驅動程式選項或其對應的 URI 選項 (如果有的話),則會使用 SSL 環境選項 作為回退。請注意,此擴充功能不會查詢預設的串流環境 (即 stream_context_get_default())。支援下列環境選項:
此選項支援回溯相容性,但應視為已過時。 |
||||||||||||||||||||||||||||||
crl_file | 字串 | 憑證撤銷清單檔案的路徑。 | ||||||||||||||||||||||||||||||
disableClientPersistence | bool |
若為
|
||||||||||||||||||||||||||||||
driver | 陣列 |
允許較高層級的函式庫將其自己的中繼資料附加到伺服器交握。依預設,擴充功能會在交握中提交自己的名稱、版本和平台 (即 PHP 版本)。可以為此陣列的
|
||||||||||||||||||||||||||||||
pem_file | 字串 |
用於用戶端驗證的 PEM 編碼憑證的路徑。 此選項是 |
||||||||||||||||||||||||||||||
pem_pwd | 字串 |
PEM 編碼憑證的密碼 (如果適用)。 此選項是 |
||||||||||||||||||||||||||||||
serverApi | MongoDB\Driver\ServerApi |
此選項用於宣告管理員的伺服器 API 版本。如果省略,則不會宣告 API 版本。 |
||||||||||||||||||||||||||||||
weak_cert_validation | bool |
此選項是 |
uri
格式無效,則擲回 MongoDB\Driver\Exception\RuntimeException。
版本 | 說明 |
---|---|
PECL mongodb 1.16.0 |
用戶端加密的 AWS KMS 提供者現在接受 將 如果為 |
PECL mongodb 1.15.0 |
如果為 |
PECL mongodb 1.14.0 |
新增 |
PECL mongodb 1.13.0 |
新增 |
PECL mongodb 1.12.0 |
現在支援 KMIP 作為用戶端加密的 KMS 提供者,並且可以在 |
PECL mongodb 1.11.0 |
新增 |
PECL mongodb 1.10.0 |
新增 現在支援 Azure 和 GCP 作為用戶端加密的 KMS 提供者,並且可以在 |
PECL mongodb 1.8.0 |
新增 新增 |
PECL mongodb 1.7.0 |
新增 現在透過 |
PECL mongodb 1.6.0 |
新增
現在透過連線字串或 |
PECL mongodb 1.5.0 |
|
PECL mongodb 1.4.0 |
新增 |
PECL mongodb 1.3.0 |
|
PECL mongodb 1.2.0 |
新增 新增了 不再使用 PHP Streams API 進行 Socket 通訊。 |
PECL mongodb 1.1.0 |
|
範例 #1 MongoDB\Driver\Manager::__construct() 基本範例
連線至獨立的 MongoDB 節點
<?php
$manager = new MongoDB\Driver\Manager("mongodb://example.com:27017");
?>
透過 Unix 網域 Socket 連線至獨立的 MongoDB 節點。Socket 路徑可能包含斜線等特殊字元,應使用 rawurlencode() 進行編碼。
<?php
$manager = new MongoDB\Driver\Manager("mongodb://" . rawurlencode("/tmp/mongodb-27017.sock"));
?>
連線至副本集
<?php
$manager = new MongoDB\Driver\Manager("mongodb://rs1.example.com,rs2.example.com/?replicaSet=myReplicaSet");
?>
連線至分片叢集(即一個或多個 mongos 實例)
<?php
$manager = new MongoDB\Driver\Manager("mongodb://mongos1.example.com,mongos2.example.com/");
?>
使用特定使用者和資料庫的驗證憑證連線至 MongoDB
<?php
$manager = new MongoDB\Driver\Manager("mongodb://myusername:mypassword@example.com/?authSource=databaseName");
?>
使用特定使用者和資料庫的驗證憑證連線至 MongoDB,其中使用者名稱或密碼包含特殊字元(例如 @
、:
、%
)。在以下範例中,密碼字串 myp@ss:w%rd
已手動跳脫;但是,也可以使用 rawurlencode() 來跳脫可能包含特殊字元的 URI 組件。
<?php
$manager = new MongoDB\Driver\Manager("mongodb://myusername:myp%40ss%3Aw%25rd@example.com/?authSource=databaseName");
?>
使用 X509 驗證連線至 MongoDB
<?php
$manager = new MongoDB\Driver\Manager(
"mongodb://example.com/?ssl=true&authMechanism=MONGODB-X509",
[],
[
"pem_file" => "/path/to/client.pem",
]
);
?>
請注意,如果您傳送 socketTimeoutMs 值為 0 以停用逾時(根據 MongoDB 文件),它將被視為預設值,在 PHP 驅動程式中為 300,000 毫秒。因此,如果您需要停用限制,請傳送一個非常大的數值。
請注意,如果您傳送 socketTimeoutMs 值為 0 以停用逾時(根據 MongoDB 文件),它將被視為預設值,在 PHP 驅動程式中為 300,000 毫秒。因此,如果您需要停用限制,請傳送一個非常大的數值。