请注意,如果您将 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]]
有关支持的 URI 选项的详细信息,请参阅 MongoDB 手册中的 » 连接字符串选项。 » 连接池选项 不受支持,因为扩展程序没有实现连接池。
uri
是一个 URL,因此其组件中的任何特殊字符都需要根据 » RFC 3986 进行 URL 编码。这与用户名和密码尤其相关,因为它们通常包含特殊字符,例如 @
、:
或 %
。当通过 Unix 域套接字连接时,套接字路径可能包含特殊字符(如斜杠)并且必须进行编码。 rawurlencode() 函数可用于对 URI 的组成部分进行编码。
defaultAuthDb
组件可用于指定与用户凭据关联的数据库名称;但是,如果指定了 authSource
URI 选项,它将优先。如果未指定 defaultAuthDb
或 authSource
,则默认情况下将使用 admin
数据库。在没有用户凭据的情况下,defaultAuthDb
组件无效。
uriOptions
其他 » 连接字符串选项,它们将覆盖 uri
参数中具有相同名称的任何选项。
选项 | 类型 | 描述 |
---|---|---|
appname | string |
MongoDB 3.4+ 能够使用连接客户端提供的元数据注释连接。此元数据包含在服务器在建立连接时的日志中,并且在启用数据库分析时也记录在慢查询日志中。 此选项可用于指定一个应用程序名称,该名称将包含在元数据中。该值不能超过 128 个字符的长度。 |
authMechanism | string |
MongoDB 将用于验证连接的身份验证机制。有关更多详细信息和支持值的列表,请参阅 MongoDB 手册中的 » 身份验证选项。 |
authMechanismProperties | array |
所选身份验证机制的属性。有关更多详细信息和支持属性的列表,请参阅 » 驱动程序身份验证规范。
|
authSource | string |
与用户凭据关联的数据库名称。默认为连接 URI 的数据库组件,如果两者都未指定,则默认为 对于将凭据存储委托给其他服务的身份验证机制(例如 GSSAPI),这应该是 |
canonicalizeHostname | bool |
如果为 此选项是 |
compressors | string |
客户端想要使用的压缩程序的优先级、逗号分隔列表。只有当客户端和服务器共用任何压缩程序时才会压缩消息,并且每个方向使用的压缩程序将取决于服务器或驱动程序的单独配置。有关更多信息,请参阅 » 驱动程序压缩规范。 |
connectTimeoutMS | int |
尝试连接并在超时前超时的时间(以毫秒为单位)。默认为 10,000 毫秒。 |
directConnection | bool |
此选项可用于控制在连接字符串中仅提供单个主机时副本集发现的行为。默认情况下,在连接字符串中提供单个成员将建立直接连接或发现其他成员,具体取决于 |
gssapiServiceName | string |
在连接到使用 Kerberos 的 MongoDB 实例时设置 Kerberos 服务名称。此值必须与 MongoDB 实例上设置的服务名称匹配(即 » saslServiceName 服务器参数)。默认为 此选项是 |
heartbeatFrequencyMS | int |
指定驱动程序检查 MongoDB 拓扑的间隔(以毫秒为单位),从上次检查结束到下一次检查开始计算。默认为 60,000 毫秒。 根据 » 服务器发现和监控规范,此值不能小于 500 毫秒。 |
journal | bool |
对应于默认写入关注点的 |
loadBalanced | bool |
指定驱动程序是否通过负载均衡器连接到 MongoDB 集群。如果为 ** |
localThresholdMS | int |
在解析读取偏好时,从多个合适的 MongoDB 实例中进行选择时,延迟窗口的大小(以毫秒为单位)。默认值为 15 毫秒。 |
maxStalenessSeconds | int |
对应于读取偏好的 如果指定,最大陈旧时间必须为大于或等于 ** |
password | string | 要进行身份验证的用户的密码。此选项在密码包含特殊字符时很有用,否则需要对连接 URI 进行 URL 编码。 |
readConcernLevel | string | 对应于读取关注的 level 参数。指定读取隔离级别。有关详细信息,请参见 MongoDB\Driver\ReadConcern。 |
readPreference | string |
对应于读取偏好的 |
readPreferenceTags | array |
对应于读取偏好的
|
replicaSet | string |
指定副本集的名称。 |
retryReads | bool |
指定驱动程序是否应自动重试因瞬态网络错误或副本集选举而失败的某些读取操作。此功能需要 MongoDB 3.6+。默认值为 ** 有关详细信息,请参见 » 可重试读取规范。 |
retryWrites | bool |
指定驱动程序是否应自动重试因瞬态网络错误或副本集选举而失败的某些写入操作。此功能需要 MongoDB 3.6+。默认值为 ** 有关详细信息,请参见 MongoDB 手册中的 » 可重试写入。 |
safe | bool |
如果为 ** 此选项已弃用,不应使用。 |
serverSelectionTimeoutMS | int |
指定在抛出异常之前,服务器选择阻塞的时间(以毫秒为单位)。默认值为 30,000 毫秒。 |
serverSelectionTryOnce | bool |
当为 ** |
socketCheckIntervalMS | int |
如果套接字最近未使用,驱动程序必须通过 |
socketTimeoutMS | int |
在超时之前尝试在套接字上进行发送或接收的时间(以毫秒为单位)。默认值为 300,000 毫秒(即 5 分钟)。 |
srvMaxHosts | int |
在最初填充种子列表时或在 SRV 轮询期间将新主机添加到拓扑时,要随机选择的 SRV 结果的最大数量。默认值为 |
srvServiceName | string |
在初始 DNS 种子列表发现和 SRV 轮询中用于 SRV 查找的服务名称。默认值为 |
ssl | bool |
如果为 ** 此选项是 |
tls | bool | |
tlsAllowInvalidCertificates | bool |
指定驱动程序在服务器的 TLS 证书无效时是否应报错。默认值为 ** 警告
禁用证书验证会创建一个漏洞。 |
tlsAllowInvalidHostnames | bool |
指定驱动程序在服务器的主机名与 TLS 证书指定的主机名不匹配时是否应报错。默认值为 ** 警告
禁用证书验证会创建一个漏洞。允许无效主机名可能会使驱动程序面临 » 中间人攻击 的风险。 |
tlsCAFile | string |
包含单个或多个证书颁发机构的路径,这些证书颁发机构在建立 TLS 连接时被视为受信任的。默认情况下,将使用系统证书存储。 |
tlsCertificateKeyFile | string |
客户端证书文件或客户端私钥文件的路径;如果需要两者,则应将文件连接起来。 |
tlsCertificateKeyFilePassword | string |
用于解密客户端私钥(即 |
tlsDisableCertificateRevocationCheck | bool | |
tlsDisableOCSPEndpointCheck | bool |
如果为 ** |
tlsInsecure | bool |
尽可能放宽 TLS 约束。为该选项指定 ** 警告
禁用证书验证会创建一个漏洞。允许无效主机名可能会使驱动程序面临 » 中间人攻击 的风险。 |
username | string | 要进行身份验证的用户的用户名。此选项在用户名包含特殊字符时很有用,否则需要对连接 URI 进行 URL 编码。 |
w | int|string |
对应于默认写入关注的 |
wTimeoutMS | int|string |
对应于默认写入关注的 如果指定, |
zlibCompressionLevel | int |
指定用于 zlib 压缩器的压缩级别。如果 |
driverOptions
选项 | 类型 | 描述 | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
allow_invalid_hostname | bool |
如果为 ** 允许无效主机名可能会使驱动程序面临 » 中间人攻击 的风险。 此选项是 |
||||||||||||||||||||||||||||||
autoEncryption | array |
提供用于启用自动客户端侧字段级加密的选项。
支持以下选项
|
||||||||||||||||||||||||||||||
ca_dir | string |
正确哈希的证书目录的路径。默认情况下将使用系统证书存储。 |
||||||||||||||||||||||||||||||
ca_file | string |
包含单个或多个证书颁发机构的路径,这些证书颁发机构在建立 TLS 连接时被视为受信任的。默认情况下,将使用系统证书存储。 此选项是 |
||||||||||||||||||||||||||||||
context | resource |
SSL 上下文选项,如果未指定驱动程序选项或其等效 URI 选项(如果有),则用作回退。请注意,扩展程序不会查询默认流上下文(即 stream_context_get_default())。支持以下上下文选项
此选项支持向后兼容,但应被视为已弃用。 |
||||||||||||||||||||||||||||||
crl_file | string | 证书吊销列表文件的路径。 | ||||||||||||||||||||||||||||||
disableClientPersistence | bool |
如果为
|
||||||||||||||||||||||||||||||
driver | array |
允许更高层级的库将自己的元数据附加到服务器握手。默认情况下,扩展程序会在握手时提交自己的名称、版本和平台(即 PHP 版本)。可以为该数组的
|
||||||||||||||||||||||||||||||
pem_file | string |
用于客户端身份验证的 PEM 编码证书的路径。 此选项是 |
||||||||||||||||||||||||||||||
pem_pwd | string |
用于 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 现在不再用于套接字通信。 |
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 毫秒。因此,如果您需要禁用限制,请发送一些非常大的值。