请注意,如果您将 socketTimeoutMs 值发送为 0 以禁用超时(根据 MongoDB 文档),它将被视为默认值,即 PHP 驱动程序中的 300,000 毫秒。因此,如果您需要禁用限制,请发送一些非常大的值。
(mongodb >=1.0.0)
MongoDB\Driver\Manager::__construct — 创建新的 MongoDB Manager
$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 | 布尔值 |
如果为 此选项是 |
compressors | 字符串 |
客户端想要使用的压缩程序的优先级逗号分隔列表。仅当客户端和服务器共享任何压缩程序时才会压缩消息,并且每个方向使用的压缩程序将取决于服务器或驱动程序的单个配置。有关更多信息,请参阅 » 驱动程序压缩规范。 |
connectTimeoutMS | 整数 |
尝试连接并在超时前的时间(毫秒)。默认为 10,000 毫秒。 |
directConnection | 布尔值 |
此选项可用于控制仅在连接字符串中提供单个主机时的副本集发现行为。默认情况下,在连接字符串中提供单个成员将建立直接连接或发现其他成员,具体取决于 |
gssapiServiceName | 字符串 |
连接到 Kerberized MongoDB 实例时设置 Kerberos 服务名称。此值必须与 MongoDB 实例上设置的服务名称匹配(即 » saslServiceName 服务器参数)。默认为 此选项是 |
heartbeatFrequencyMS | 整数 |
指定驱动程序检查 MongoDB 拓扑的间隔(毫秒),从上一次检查结束到下一次检查开始计算。默认为 60,000 毫秒。 根据» 服务器发现和监控规范,此值不能小于 500 毫秒。 |
journal | 布尔值 |
对应于默认写入关注的 |
loadBalanced | 布尔值 |
指定驱动程序是否通过负载均衡器连接到 MongoDB 集群。如果为 |
localThresholdMS | 整数 |
在解析读取偏好时,在多个合适的 MongoDB 实例之间进行选择时,延迟窗口的大小(以毫秒为单位)。默认为 15 毫秒。 |
maxStalenessSeconds | 整数 |
对应于读取偏好的 如果指定,则最大陈旧性必须是大于或等于 |
password | 字符串 | 要进行身份验证的用户密码。如果密码包含特殊字符,此选项很有用,否则需要对连接 URI 进行 URL 编码。 |
readConcernLevel | 字符串 | 对应于读取关注的 level 参数。指定读取隔离级别。有关详细信息,请参阅MongoDB\Driver\ReadConcern。 |
readPreference | 字符串 |
对应于读取偏好的 |
readPreferenceTags | 数组 |
对应于读取偏好的
|
replicaSet | 字符串 |
指定副本集的名称。 |
retryReads | 布尔值 |
指定驱动程序是否应自动重试由于瞬态网络错误或副本集选举而失败的某些读取操作。此功能需要 MongoDB 3.6+。默认为 有关更多信息,请参阅» 可重试读取规范。 |
retryWrites | 布尔值 |
指定驱动程序是否应自动重试由于瞬态网络错误或副本集选举而失败的某些写入操作。此功能需要 MongoDB 3.6+。默认为 有关更多信息,请参阅 MongoDB 手册中的» 可重试写入。 |
safe | 布尔值 |
如果为 此选项已弃用,不应使用。 |
serverSelectionTimeoutMS | 整数 |
指定在抛出异常之前阻塞服务器选择多长时间(以毫秒为单位)。默认为 30,000 毫秒。 |
serverSelectionTryOnce | 布尔值 |
当为 |
socketCheckIntervalMS | 整数 |
如果套接字最近未使用,则驱动程序必须通过 |
socketTimeoutMS | 整数 |
在超时之前尝试在套接字上发送或接收的时间(以毫秒为单位)。默认为 300,000 毫秒(即五分钟)。 |
srvMaxHosts | 整数 |
在最初填充种子列表时或在 SRV 轮询期间将新主机添加到拓扑时,要随机选择的 SRV 结果的最大数量。默认为 |
srvServiceName | 字符串 |
在初始 DNS 种子列表发现和 SRV 轮询中用于 SRV 查找的服务名称。默认为 |
ssl | 布尔值 |
如果为 此选项是 |
tls | 布尔值 | |
tlsAllowInvalidCertificates | 布尔值 |
指定服务器的 TLS 证书无效时驱动程序是否应出错。默认为 警告
禁用证书验证会造成安全漏洞。 |
tlsAllowInvalidHostnames | 布尔值 |
指定服务器的主机名与 TLS 证书指定的主机名不匹配时驱动程序是否应出错。默认为 警告
禁用证书验证会造成安全漏洞。允许无效主机名可能会使驱动程序面临» 中间人攻击的风险。 |
tlsCAFile | 字符串 |
包含一个或多个证书颁发机构的文件路径,在建立 TLS 连接时,这些证书颁发机构将被视为受信任的。默认情况下将使用系统证书存储。 |
tlsCertificateKeyFile | 字符串 |
客户端证书文件或客户端私钥文件的路径;如果两者都需要,则应将文件连接起来。 |
tlsCertificateKeyFilePassword | 字符串 |
解密客户端私钥(即 |
tlsDisableCertificateRevocationCheck | 布尔值 | |
tlsDisableOCSPEndpointCheck | 布尔值 | |
tlsInsecure | 布尔值 |
尽可能放宽 TLS 约束。为此选项指定 警告
禁用证书验证会造成安全漏洞。允许无效主机名可能会使驱动程序面临» 中间人攻击的风险。 |
username | 字符串 | 要进行身份验证的用户用户名。如果用户名包含特殊字符,此选项很有用,否则需要对连接 URI 进行 URL 编码。 |
w | int|string |
对应于默认写入关注的 |
wTimeoutMS | int|string |
对应于默认写入关注的 如果指定,则 |
zlibCompressionLevel | 整数 |
指定用于 zlib 压缩器的压缩级别。如果 |
driverOptions
选项 | 类型 | 描述 | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
allow_invalid_hostname | 布尔值 |
允许无效主机名可能会使驱动程序面临» 中间人攻击的风险。 此选项是 |
||||||||||||||||||||||||||||||
autoEncryption | 数组 |
提供启用自动客户端侧字段级加密的选项。
支持以下选项
|
||||||||||||||||||||||||||||||
ca_dir | 字符串 |
正确散列的证书目录的路径。默认情况下将使用系统证书存储。 |
||||||||||||||||||||||||||||||
ca_file | 字符串 |
包含一个或多个证书颁发机构的文件路径,在建立 TLS 连接时,这些证书颁发机构将被视为受信任的。默认情况下将使用系统证书存储。 此选项是 |
||||||||||||||||||||||||||||||
context | resource |
SSL 上下文选项,如果未指定驱动程序选项或其等效的 URI 选项(如果有),则用作回退。请注意,扩展程序不会参考默认流上下文(即 stream_context_get_default())。支持以下上下文选项
此选项支持向后兼容,但应视为已弃用。 |
||||||||||||||||||||||||||||||
crl_file | 字符串 | 证书吊销列表文件的路径。 | ||||||||||||||||||||||||||||||
disableClientPersistence | 布尔值 |
如果为
|
||||||||||||||||||||||||||||||
driver | 数组 |
允许更高级别的库将自己的元数据附加到服务器握手。默认情况下,扩展程序在握手时提交自己的名称、版本和平台(即 PHP 版本)。可以为该数组的
|
||||||||||||||||||||||||||||||
pem_file | 字符串 |
到用于客户端身份验证的 PEM 编码证书的路径。 此选项是 |
||||||||||||||||||||||||||||||
pem_pwd | 字符串 |
PEM 编码证书的密码(如果适用)。 此选项是 |
||||||||||||||||||||||||||||||
serverApi | MongoDB\Driver\ServerApi |
此选项用于为管理器声明服务器 API 版本。如果省略,则不声明任何 API 版本。 |
||||||||||||||||||||||||||||||
weak_cert_validation | 布尔值 |
此选项是 |
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 |
添加了 URI 选项 通过连接字符串或 |
PECL mongodb 1.5.0 |
|
PECL mongodb 1.4.0 |
添加了 |
PECL mongodb 1.3.0 |
|
PECL mongodb 1.2.0 |
添加了 添加了 不再使用 PHP 流 API 进行套接字通信。 |
PECL mongodb 1.1.0 |
|
示例 #1 MongoDB\Driver\Manager::__construct() 基本示例
连接到独立的 MongoDB 节点
<?php
$manager = new MongoDB\Driver\Manager("mongodb://example.com:27017");
?>
通过 Unix 域套接字连接到独立的 MongoDB 节点。套接字路径可能包含特殊字符(如斜杠),应使用 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:[email protected]/?authSource=databaseName");
?>
连接到 MongoDB 并使用特定用户和数据库的认证凭据,其中用户名或密码包含特殊字符(例如 @
、:
、%
)。在以下示例中,密码字符串 myp@ss:w%rd
已手动转义;但是,rawurlencode() 也可用于转义可能包含特殊字符的 URI 组件。
<?php
$manager = new MongoDB\Driver\Manager("mongodb://myusername:myp%40ss%3Aw%[email protected]/?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 毫秒。因此,如果您需要禁用限制,请发送一些非常大的值。