PHP8 MongoDB\Driver\Manager::__construct
(mongoDB >=1.0.0)
MongoDB\Driver\Manager::__construct — 创建新的MongoDB管理器
说明
final public MongoDB\Driver\Manager::__construct(?string $uri = null, ?array $uriOptions = null, ?array $driverOptions = null)
使用指定的选项构造新的 MongoDB\Driver\Manager 对象。
注意: 根据 » 服务器发现和监控规范, 此构造函数不执行 I/O。 连接将按需初始化, 执行第一个操作时。
注意: 通过连接字符串或 uriOptions 参数指定任何 SSL 或 TLS URI 选项时,驱动程序将隐式 为其连接启用 TLS。若要避免这种情况,请显式禁用 tls 选项,或者不指定任何 TLS 选项。
注意: 在 Unix 平台上,MongoDB 驱动程序对使用 fork() 系统调用,而不调用 exec()。建议用户不要 在分叉中重用 MongoDB\Driver\Manager 实例 子进程。
参数
uri
A » mongodb:// 连接 URI:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[defaultAuthDb][?options]]
有关支持的 URI 选项的详细信息,请参阅 MongoDB 手册中的 » 连接字符串选项。» 不支持连接池选项,因为 PHP 驱动程序不实现连接池。
是一个 URL,因此任何特殊字符 其组件需要根据 » RFC 3986 进行 URL 编码。这尤其 与用户名和密码相关,通常可以包括特殊 字符,例如 、 或 。通过 Unix 域套接字连接时,套接字 path 可能包含特殊字符(如斜杠),并且必须进行编码。 rawurlencode() 函数可用于编码 URI 的组成部分。
uri
@
:
%
该组件可用于指定 与用户凭据关联的数据库名称;但是,如果指定,则 URI 选项将具有优先级。 如果既未指定,也未指定,则默认使用数据库。在没有用户凭据的情况下,该组件不起作用。
defaultAuthDb
authSource
defaultAuthDb
authSource
admin
defaultAuthDb
uriOptions
其他 » 连接字符串选项, 这将覆盖参数中具有相同名称的任何选项。
uri
uri选项 选择 类型 描述 应用名称 字符串 MongoDB 3.4+ 能够使用元数据注释连接 由连接客户端提供。此元数据包含在 服务器在建立连接时的日志,并记录在 启用数据库分析时查询日志速度较慢。
此选项可用于指定应用程序名称,该名称将 包含在元数据中。该值不能超过 128 个字符 在长度上。
auth机制 字符串 MongoDB 将用于身份验证的身份验证机制 连接。有关其他详细信息和支持的列表 值,请参阅 MongoDB 手册中的 » 身份验证选项。
authMechanism属性 数组 所选身份验证机制的属性。对于其他 有关详细信息和支持的属性列表,请参阅 » 驱动程序身份验证规范。
注意: 如果未在 URI 字符串中指定,则此选项表示为 键/值对的数组。此数组中的键和值 应该是字符串。
authSource 字符串 与用户凭据关联的数据库名称。违约 添加到连接 URI 的数据库组件,如果两者都未指定,则添加到数据库。
admin
对于将凭据存储委派给的身份验证机制 其他服务(例如 GSSAPI),这应该是 .
"$external"
canonicalize主机名 布尔 如果
为 true
,驱动程序将解析服务器的真实主机名 通过 SASL 进行身份验证之前的 IP 地址。一些底层 GSSAPI 图层已经执行此操作,但该功能可能会在 他们的配置(例如)。默认值为false
。krb.conf
此选项是 URI 选项属性的已弃用别名。
"CANONICALIZE_HOST_NAME"
"authMechanismProperties"
压缩机 字符串 客户端的压缩器的优先级、逗号分隔的列表 想要使用。仅当客户端和服务器 共享任何通用压缩机,以及每个压缩机中使用的压缩机 方向将取决于服务器的个别配置 或司机。有关详细信息,请参阅 » 驱动程序压缩规范。
connectTimeoutMS (连接超时MS) 国际 超时前尝试连接的时间(以毫秒为单位)。 默认值为 10,000 毫秒。
直接连接 布尔 此选项可用于控制副本集发现行为 当连接字符串中仅提供单个主机时。由 默认情况下,在连接字符串中提供单个成员将 建立直接连接或发现其他成员 取决于 URI 选项是否 分别被省略或存在。指定
false
强制 发现发生(如果省略) 或指定true
以强制直接连接(如果存在)。"replicaSet"
"replicaSet"
"replicaSet"
gssapiServiceName 字符串 连接到 Kerberized MongoDB 时设置 Kerberos 服务名称 实例。此值必须与 MongoDB 上设置的服务名称匹配 实例(即 » saslServiceName 服务器参数)。默认值为 。
"mongodb"
此选项是 URI 选项属性的已弃用别名。
"SERVICE_NAME"
"authMechanismProperties"
心跳频率MS 国际 指定驱动程序检查之间的间隔(以毫秒为单位) MongoDB 拓扑,从上次检查的末尾开始计数 直到下一个开始。默认值为 60,000 毫秒。
根据 » 服务器发现和监视规范, 此值不能小于 500 毫秒。
杂志 布尔 对应于默认写入关注点的参数。如果
为 true
,则写入将 需要 MongoDB 确认操作已 写给日记。有关详细信息,请参阅 MongoDB\Driver\WriteConcern。journal
负载平衡 布尔 指定驱动程序是否连接到 MongoDB 集群 通过负载均衡器。如果
为 true
,则驱动程序只能连接到 单个主机(由连接字符串或 SRV 指定 lookup),URI 选项 不能为true
,并且 URI 选项 必须省略。默认值为false
。"directConnection"
"replicaSet"
localThresholdMS 国际 用于选择的延迟窗口的大小(以毫秒为单位) 多个合适的 MongoDB 实例,同时解析读取 偏好。默认值为 15 毫秒。
maxStalenessSeconds 国际 对应于读取首选项的 .以秒为单位指定如何 在客户端停止使用它进行读取之前,辅助数据库可能会过时 操作。默认情况下,没有最大过时和客户端 在选择将 读取操作。有关详细信息,请参阅 MongoDB\Driver\ReadPreference。
"maxStalenessSeconds"
如果指定,则最大过时性必须是有符号的 32 位整数 大于或等于
MongoDB\Driver\ReadPreference::SMALLEST_MAX_STALENESS_SECONDS
(即 90 秒)。密码 字符串 正在进行身份验证的用户的密码。此选项很有用 如果密码包含特殊字符,否则会 需要对连接 URI 进行 URL 编码。 readConcernLevel 字符串 对应于读取关注点的参数。指定读取隔离级别。有关详细信息,请参阅 MongoDB\Driver\ReadConcern。 level
readPreference 字符串 对应于读取首选项的参数。默认值为 。详情请见 请参阅 MongoDB\Driver\ReadPreference。
mode
"primary"
readPreference标签 数组 对应于读取首选项的参数。标记集允许您将读取操作定位到特定的 副本集的成员。有关详细信息,请参阅 MongoDB\Driver\ReadPreference。
tagSets
注意: 如果未在 URI 字符串中指定,则此选项表示为 与 MongoDB\Driver\ReadPreference::__construct() 所需的格式一致的数组。
replicaSet 字符串 指定副本集的名称。
retryReads 布尔 指定驱动程序是否应自动重试 某些由于暂时性网络错误而失败的读取操作 或副本集选举。此功能需要 MongoDB 3.6+。 默认值为
true
。有关详细信息,请参阅 » 可重试读取规范。
retryWrites的 布尔 指定驱动程序是否应自动重试 某些由于暂时性网络错误而失败的写入操作 或副本集选举。此功能需要 MongoDB 3.6+。 默认值为
true
。有关详细信息,请参阅 MongoDB 手册中的 » 可重试写入。
安全 布尔 如果
为 true
,则指定默认写入 关注的参数。如果为 false
,则指定。有关详细信息,请参阅 MongoDB\Driver\WriteConcern。1
w
0
此选项已弃用,不应使用。
服务器选择超时MS 国际 指定阻止服务器选择的时间(以毫秒为单位) 在抛出异常之前。默认值为 30,000 毫秒。
serverSelectionTryOnce 布尔 如果为 true
,则指示驱动程序扫描 MongoDB 部署 服务器选择失败后正好一次,然后选择 服务器或引发错误。如果为 false
,驱动程序会阻止 搜索高达该值的服务器。默认值为true
。"serverSelectionTimeoutMS"
套接字检查间隔MS 国际 如果最近没有使用插座,驱动程序必须通过 一个命令,然后再将其用于任何 操作。默认值为 5,000 毫秒。
hello
套接字超时MS 国际 尝试在套接字上发送或接收的时间(以毫秒为单位) 在超时之前。默认值为 300,000 毫秒(即 5 毫秒 分钟)。
srvMax主机 国际 最初随机选择的最大 SRV 结果数 填充种子列表,或者在 SRV 轮询期间将新主机添加到 拓扑。默认值为(即无最大值)。
0
srvServiceName 字符串 用于在初始 DNS 种子列表中查找 SRV 的服务名称 发现和 SRV 轮询。默认值为 。
"mongodb"
SSL公司 布尔 如果
为 true
,则启动与 TLS/SSL 的连接。默认值为false
。此选项是 URI 选项的已弃用别名。
"tls"
TLS的 布尔 如果
为 true
,则启动与 TLS/SSL 的连接。默认值为false
。tlsAllowInvalidCertificates 布尔 指定驱动程序是否应在服务器的 TLS 证书无效。默认值为
false
。警告禁用证书验证会造成漏洞。
TLSALOVinvaldhosames 布尔 指定驱动程序在出现 服务器的主机名与指定的主机名不匹配 TLS 证书。默认值为
false
。警告禁用证书验证会造成漏洞。允许 无效的主机名可能会使驱动程序遭受 » 中间人攻击。
tlsCAFile 字符串 包含单个或捆绑证书的文件路径 建立 TLS 连接时被视为受信任的机构。 默认情况下将使用系统证书存储。
tlsCertificateKeyFile 字符串 客户端证书文件或客户端私钥文件的路径; 如果两者都需要,则文件应为 级 联。
tlsCertificateKeyFilePassword 字符串 用于解密客户端私钥的密码(即 URI 选项) 用于 TLS 连接。
"tlsCertificateKeyFile"
tlsDisableCertificateRevocationCheck 布尔 如果
为 true
,驱动程序将不会尝试检查证书 吊销状态(例如 OCSP、CRL)。默认值为false
。tlsDisableOCSPEndpointCheck 布尔 如果
为 true
,驱动程序将不会尝试联系 OCSP 响应程序 如果需要,则使用端点(即未装订 OCSP 响应)。违约 设置为false
。tls不安全 布尔 尽可能放宽 TLS 约束。指定
true
此选项与为 URI 和 URI 选项指定true
的效果相同。违约 设置为false
。"tlsAllowInvalidCertificates"
"tlsAllowInvalidHostnames"
警告禁用证书验证会造成漏洞。允许 无效的主机名可能会使驱动程序遭受 » 中间人攻击。
用户名 字符串 正在进行身份验证的用户的用户名。此选项很有用 如果用户名包含特殊字符,否则会 需要对连接 URI 进行 URL 编码。 在 整数|字符串 对应于默认写入关注点的参数。有关详细信息,请参阅 MongoDB\Driver\WriteConcern。
w
w超时MS 整数|字符串 对应于默认写入关注点的参数。指定时间限制, 以毫秒为单位,用于写入问题。有关详细信息,请参阅 MongoDB\Driver\WriteConcern。
wtimeout
如果指定,则必须是有符号的 32 位 整数大于或等于零。
wTimeoutMS
zlibCompressionLevel 国际 指定用于 zlib 压缩器的压缩级别。这 如果 URI 选项。有关详细信息,请参阅 » 驱动程序压缩规范。
zlib
"compressors"
driverOptions
driver选项 选择 类型 描述 Allo_invalid_hostname 布尔 如果
为 true
,则禁用主机名验证。默认值为false
。允许无效的主机名可能会使驱动程序面临 » 中间人攻击。
此选项是 URI 选项的已弃用别名。
"tlsAllowInvalidHostnames"
自动加密 数组 提供用于启用自动客户端字段级别的选项 加密。
注意:
自动加密是一项仅限企业的功能,仅 适用于集合上的操作。自动加密不是 支持对数据库或视图的操作,以及 不被绕过将导致错误(请参阅 » libmongocrypt:自动加密允许列表)。绕过自动加密 对于所有操作,设置为
true
。bypassAutoEncryption
自动加密要求经过身份验证的用户具有 » listCollections 权限操作。
显式加密/解密和自动解密是 社区功能。当
为 true
时,驱动程序仍可以自动解密。bypassAutoEncryption
支持以下选项:
自动加密选项 选择 类型 描述 keyVaultClient MongoDB\驱动程序\管理器 用于将数据密钥查询路由到单独的 MongoDB 集群的管理器。默认情况下,使用当前 Manager 和集群。 keyVaultNamespace 字符串 一个完全限定的命名空间(例如 ),表示包含用于加密和解密的所有数据密钥的集合。此选项是必需的。 "databaseName.collectionName"
kms提供程序 数组 包含一个或多个 KMS 提供程序的配置的文档,这些提供程序用于加密数据密钥。支持的提供程序包括 、 、 、 和 ,并且必须至少指定一个。
"aws"
"azure"
"gcp"
"kmip"
"local"
如果为 、 或 驱动程序指定了空文档 将尝试使用 » 自动凭据配置提供程序。
"aws"
"azure"
"gcp"
格式如下:
"aws"
aws: { accessKeyId: <string>, secretAccessKey: <string>, sessionToken: <optional string> }
格式如下:
"azure"
azure: { tenantId: <string>, clientId: <string>, clientSecret: <string>, identityPlatformEndpoint: <optional string> // Defaults to "login.microsoftonline.com" }
格式如下:
"gcp"
gcp: { email: <string>, privateKey: <base64 string>|<MongoDB\BSON\Binary>, endpoint: <optional string> // Defaults to "oauth2.googleapis.com" }
格式如下:
"kmip"
kmip: { endpoint: <string> }
格式如下:
"local"
local: { // 96-byte master key used to encrypt/decrypt data keys key: <base64 string>|<MongoDB\BSON\Binary> }
tls选项 数组 包含一个或多个 KMS 提供商的 TLS 配置的文档。支持的提供程序包括 、 、 和 。所有提供程序都支持以下选项:
"aws"
"azure"
"gcp"
"kmip"
<provider>: { tlsCaFile: <optional string>, tlsCertificateKeyFile: <optional string>, tlsCertificateKeyFilePassword: <optional string>, tlsDisableOCSPEndpointCheck: <optional bool> }
架构映射 数组|对象 集合命名空间到本地 JSON 架构的映射。这是 用于配置自动加密。有关详细信息,请参阅 MongoDB 手册中的 » 自动加密规则。这是一个错误 在 和 中指定一个集合。
schemaMap
encryptedFieldsMap
注意: 提供
schemaMap
提供更多 安全性而不是依赖从 服务器。它可以防止恶意服务器宣传 false JSON 架构,这可能会诱骗客户端发送 应加密的未加密数据。注意: 仅在
schemaMap
中提供的模式 适用于配置客户端自动加密 加密。JSON 架构中的其他验证规则将 不由驱动程序强制执行,将导致错误。绕过自动加密 布尔 如果 为 true
,则不会生成 自然而然。这用于禁用自动加密。 默认值为false
。mongocryptd
绕过QueryAnalysis 布尔 如果
为 true
,则对传出命令的自动分析将是 禁用,不会 自动生成。这启用了显式 用于查询索引字段的加密,而无需 企业许可的库或进程。默认值为false
。mongocryptd
crypt_shared
mongocryptd
encryptedFieldsMap 数组|对象 集合命名空间到文档的映射。这用于 配置可查询加密。有关更多信息,请参阅 MongoDB 手册中的 » 字段加密和可查询性。这是一个错误 在 和 中指定一个集合。
encryptedFields
encryptedFieldsMap
schemaMap
注意: 提供
encryptedFieldsMap
提供 比依赖从服务器获取的encryptedFields
更安全。 它可以防止恶意服务器通告虚假的encryptedFields
。额外选项 数组 与过程有关。以下选项 支持:
extraOptions
mongocryptd
mongocryptdURI
(string):用于连接到现有进程的 URI。默认值为 。mongocryptd
"mongodb://localhost:27020"
mongocryptdBypassSpawn
(bool):如果为 true
,则阻止驱动程序生成。默认值为false
。mongocryptd
mongocryptdSpawnPath
(string):搜索二进制文件的绝对路径。默认为空字符串并查询系统路径。mongocryptd
mongocryptdSpawnArgs
(array):生成时要传递到的字符串参数数组。默认值为 。mongocryptd
["--idleShutdownTimeoutSecs=60"]
cryptSharedLibPath
(string):共享库的绝对路径。默认为空字符串并查询系统路径。crypt_shared
cryptSharedLibRequired
(bool):如果为 true
,则要求驱动程序加载 。默认值为false
。crypt_shared
有关详细信息,请参阅 » 客户端加密规范。
注意: 自动加密是企业独有的功能,只有 适用于集合上的操作。自动加密不是 支持对数据库或视图的操作,以及 不绕过将导致错误。绕过自动 所有操作的加密,在
autoEncryption
中设置bypassAutoEncryption=true
。有关的更多信息 允许的操作,请参阅 » 客户端加密规范。ca_dir 字符串 正确哈希证书目录的路径。系统 默认情况下将使用证书存储。
ca_file 字符串 包含单个或捆绑证书的文件路径 建立 TLS 连接时被视为受信任的机构。 默认情况下将使用系统证书存储。
此选项是 URI 选项的已弃用别名。
"tlsCAFile"
上下文 资源 要用作的 SSL 上下文选项 如果驱动程序选项或其等效的 URI 选项(如果有)则回退, 未指定。请注意,驱动程序不会咨询默认值 流上下文(即 stream_context_get_default())。以下 支持上下文选项:
SSL 上下文选项回退 驱动程序选项 上下文选项(回退) ca_dir 卡帕斯 ca_file cafile(卡菲尔酒店) pem_file local_cert pem_pwd 密码 weak_cert_validation allow_self_signed 支持此选项以实现向后兼容性,但应 被视为已弃用。
crl_file 字符串 证书吊销列表文件的路径。 disableClientPersistence 布尔 如果
为 true
,则此管理器将使用一个新的 libmongoc 客户端,该客户端将 不能持久化或与其他 Manager 对象共享。当这个 Manager 对象被释放,其客户端将被销毁,任何 连接将被关闭。默认值为false
。注意: 通常不建议禁用客户端持久性。
司机 数组 允许自定义驱动程序将自己的元数据追加到服务器 握手。默认情况下,驱动程序会提交自己的名称、版本和 平台(i.e. PHP版本)在握手中。自定义驱动程序可以 指定此数组的 、 和 键的字符串,这些字符串将是 附加到握手文档中的相应字段。
"name"
"version"
"platform"
注意: 握手信息限制为 512 字节。司机会 截断握手数据以适合此 512 字节字符串。司机 鼓励 ODM 保持自己的元数据简洁。
pem_file 字符串 用于客户端身份验证的 PEM 编码证书的路径。
此选项是 URI 选项的已弃用别名。
"tlsCertificateKeyFile"
pem_pwd 字符串 PEM 编码证书的密码(如果适用)。
此选项是 URI 选项的已弃用别名。
"tlsCertificateKeyFilePassword"
服务器Api MongoDB\驱动程序\ServerApi 此选项用于声明管理器的服务器 API 版本。 如果省略,则不会声明 API 版本。
weak_cert_validation 布尔 如果
为 true
,则禁用证书验证。默认值为false
此选项是 URI 选项的已弃用别名。
"tlsAllowInvalidCertificates"
错误/异常
- Throws MongoDB\Driver\Exception\InvalidArgumentException on argument parsing errors.
- Throws MongoDB\Driver\Exception\RuntimeException if the format is invaliduri
更新日志
版本 | 说明 |
---|---|
PECL mongodb 1.16.0 | 用于客户端加密的 AWS KMS 提供商现在接受一个选项,该选项可用于 使用临时 AWS 凭证进行身份验证。 添加到驱动程序选项的字段中。 如果为 或 KMS 提供程序指定了空文档,驱动程序将尝试 使用 » 自动凭据配置提供程序。 |
PECL mongodb 1.15.0 | 如果为 KMS 指定了空文档 provider,驱动程序将尝试使用 » 自动凭据配置提供程序。 |
PECL mongodb 1.14.0 | 添加了 和 自动加密选项。 与以下内容相关的其他选项包括 现在支持自动加密 选择。 |
PECL mongodb 1.13.0 | 添加了 和 URI 选项。 |
PECL mongodb 1.12.0 | 现在支持将 KMIP 作为 KMS 提供商进行客户端加密和 可以在驱动程序选项的字段中配置。此外,TLS 现在可以在驱动程序选项字段中配置 KMS 提供商的选项。 |
PECL mongodb 1.11.0 | 添加了 URI 选项。 |
PECL mongodb 1.10.0 | 添加了驱动程序选项。 现在支持将 Azure 和 GCP 作为客户端的 KMS 提供程序 加密,并且可以在驱动程序选项的字段中配置。Base64 编码 字符串现在被接受为 MongoDB\BSON\Binary 的替代选项。 |
PECL mongodb 1.8.0 | 添加了 、 和 URI 选项。 添加了驱动程序选项。 |
PECL mongodb 1.7.0 | 添加了驱动程序选项。 通过参数指定任何 SSL 或 TLS 选项现在将隐式启用 TLS,就像 相应的 URI 选项。 |
PECL mongodb 1.6.0 | 添加了 、 、 、 、 、 、 和 URI 选项。 URI 选项默认为 现在,通过连接字符串或参数指定任何 SSL 或 TLS URI 选项将隐式启用 TLS,除非 或 |
PECL mongodb 1.5.0 |
|
PECL mongodb 1.4.0 | 添加了 、 和 URI 选项。 |
PECL mongodb 1.3.0 | 参数现在接受和选项。以前,这些 选项仅在参数中受支持。 |
PECL mongodb 1.2.0 | 该参数默认为 。默认端口仍为 。 添加了 URI 选项。 添加了 、 、 、 、 、 和 驱动程序选项。 PHP Streams API 不再用于套接字通信。URI 选项现在默认为 10 秒,而不是以前版本中的default_socket_timeout。此外,驱动程序不再通过驱动程序选项支持所有 SSL 上下文选项。 |
PECL mongodb 1.1.0 | 该参数是可选的,默认为 。 |
示例
示例 #1 MongoDB\Driver\Manager::__construct() 基本示例
连接到独立的 MongoDB 节点:
<?php
$manager = new MongoDB\Driver\Manager("mongodb://example.com:27017");
?>
通过 Unix 域套接字连接到独立的 MongoDB 节点。套接字 path 可能包含特殊字符,例如斜杠,并且应该进行编码 使用 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 user 和 database,其中用户名或密码包含 字符(例如 、 、 )。在以下示例中,密码字符串已手动转义;但是,rawurlencode() 也可用于转义 URI 组件 可能包含特殊字符。@
:
%
myp@ss:w%rd
<?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",
]
);
?>
参见
- 连接处理和持久性
- » MongoDB 连接字符串格式
更多建议: