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 实例 子进程。
参数
uriA » 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 选项将具有优先级。 如果既未指定,也未指定,则默认使用数据库。在没有用户凭据的情况下,该组件不起作用。
defaultAuthDbauthSourcedefaultAuthDbauthSourceadmindefaultAuthDburiOptions其他 » 连接字符串选项, 这将覆盖参数中具有相同名称的任何选项。
uriuri选项 选择 类型 描述 应用名称 字符串 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。 levelreadPreference 字符串 对应于读取首选项的参数。默认值为 。详情请见 请参阅 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。1w0此选项已弃用,不应使用。
服务器选择超时MS 国际 指定阻止服务器选择的时间(以毫秒为单位) 在抛出异常之前。默认值为 30,000 毫秒。
serverSelectionTryOnce 布尔 如果为 true,则指示驱动程序扫描 MongoDB 部署 服务器选择失败后正好一次,然后选择 服务器或引发错误。如果为 false,驱动程序会阻止 搜索高达该值的服务器。默认值为true。"serverSelectionTimeoutMS"套接字检查间隔MS 国际 如果最近没有使用插座,驱动程序必须通过 一个命令,然后再将其用于任何 操作。默认值为 5,000 毫秒。
hello套接字超时MS 国际 尝试在套接字上发送或接收的时间(以毫秒为单位) 在超时之前。默认值为 300,000 毫秒(即 5 毫秒 分钟)。
srvMax主机 国际 最初随机选择的最大 SRV 结果数 填充种子列表,或者在 SRV 轮询期间将新主机添加到 拓扑。默认值为(即无最大值)。
0srvServiceName 字符串 用于在初始 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。
ww超时MS 整数|字符串 对应于默认写入关注点的参数。指定时间限制, 以毫秒为单位,用于写入问题。有关详细信息,请参阅 MongoDB\Driver\WriteConcern。
wtimeout如果指定,则必须是有符号的 32 位 整数大于或等于零。
wTimeoutMSzlibCompressionLevel 国际 指定用于 zlib 压缩器的压缩级别。这 如果 URI 选项。有关详细信息,请参阅 » 驱动程序压缩规范。
zlib"compressors"driverOptionsdriver选项 选择 类型 描述 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 手册中的 » 自动加密规则。这是一个错误 在 和 中指定一个集合。
schemaMapencryptedFieldsMap注意: 提供
schemaMap提供更多 安全性而不是依赖从 服务器。它可以防止恶意服务器宣传 false JSON 架构,这可能会诱骗客户端发送 应加密的未加密数据。注意: 仅在
schemaMap中提供的模式 适用于配置客户端自动加密 加密。JSON 架构中的其他验证规则将 不由驱动程序强制执行,将导致错误。绕过自动加密 布尔 如果 为 true,则不会生成 自然而然。这用于禁用自动加密。 默认值为false。mongocryptd绕过QueryAnalysis 布尔 如果
为 true,则对传出命令的自动分析将是 禁用,不会 自动生成。这启用了显式 用于查询索引字段的加密,而无需 企业许可的库或进程。默认值为false。mongocryptdcrypt_sharedmongocryptdencryptedFieldsMap 数组|对象 集合命名空间到文档的映射。这用于 配置可查询加密。有关更多信息,请参阅 MongoDB 手册中的 » 字段加密和可查询性。这是一个错误 在 和 中指定一个集合。
encryptedFieldsencryptedFieldsMapschemaMap注意: 提供
encryptedFieldsMap提供 比依赖从服务器获取的encryptedFields更安全。 它可以防止恶意服务器通告虚假的encryptedFields。额外选项 数组 与过程有关。以下选项 支持:
extraOptionsmongocryptdmongocryptdURI(string):用于连接到现有进程的 URI。默认值为 。mongocryptd"mongodb://localhost:27020"mongocryptdBypassSpawn(bool):如果为 true,则阻止驱动程序生成。默认值为false。mongocryptdmongocryptdSpawnPath(string):搜索二进制文件的绝对路径。默认为空字符串并查询系统路径。mongocryptdmongocryptdSpawnArgs(array):生成时要传递到的字符串参数数组。默认值为 。mongocryptd["--idleShutdownTimeoutSecs=60"]cryptSharedLibPath(string):共享库的绝对路径。默认为空字符串并查询系统路径。crypt_sharedcryptSharedLibRequired(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 连接字符串格式