文档菜单
文档首页
/ / /
PHP库手册

连接到MongoDB

本页内容

  • 概述
  • 示例应用程序
  • 连接
  • Atlas
  • 本地部署
  • 副本集
  • 传输层安全性 (TLS)
  • 启用TLS
  • 指定证书颁发机构 (CA) 文件
  • 禁用OCSP检查
  • 指定证书吊销列表 (CRL)
  • 提供客户端证书
  • 提供证书密钥文件密码
  • 允许不安全TLS
  • 禁用证书验证
  • 禁用主机名验证
  • 稳定API

本页包含代码示例,展示了如何使用各种设置将您的PHP应用程序连接到MongoDB。

提示

要了解更多关于本页上的连接选项,请参阅每个部分提供的链接。

要使用本页上的连接示例,将代码示例复制到示例应用程序或您自己的应用程序。请确保用代码示例中的占位符,例如<hostname>,替换为您MongoDB部署的相关值。

您可以使用以下示例应用程序来测试本页上的代码示例。要使用示例应用程序,请执行以下步骤

  1. 确保您已在项目中安装MongoDB PHP库。有关安装MongoDB PHP库的更多信息,请参阅下载和安装指南。

  2. 复制以下代码并将其粘贴到新的.php文件中。

  3. 从本页复制代码示例并将其粘贴到文件中指定的行。

1<?php
2
3require __DIR__ . '/../vendor/autoload.php';
4
5// Start example code here
6
7// End example code here
8
9try {
10 $client->test->command(['ping' => 1]);
11 echo 'Successfully pinged the MongoDB server.', PHP_EOL;
12} catch (MongoDB\Driver\Exception\RuntimeException $e) {
13 printf("Failed to ping the MongoDB server: %s\n", $e->getMessage());
14}

重要

百分号编码

在将用户名和密码包含在MongoDB URI中之前,您必须对它们进行百分号编码。您可以使用 rawurlencode() 方法根据RFC 3986 中指定的URI语法进行编码。不要在将用户名或密码作为参数传递给 MongoDB.Client 构造函数时对它们进行百分号编码。

以下代码展示了如何连接到 MongoDB Atlas 部署。

$uri = '<Atlas connection string>';
$client = new MongoDB\Client($uri);

要了解更多关于连接到 Atlas 部署的信息,请参阅连接目标指南中的Atlas

以下代码展示了如何连接到本地 MongoDB 部署。

$uri = 'mongodb://localhost:27017/';
$client = new MongoDB\Client($uri);

注意

如果您未指定 $uri 参数,连接 URI 默认为 'mongodb://127.0.0.1:27017'

要了解更多关于连接到本地部署的信息,请参阅连接目标指南中的本地部署

以下代码展示了如何连接到副本集部署。

$client = new MongoDB\Client(
'mongodb://<replica set member>:<port>/',
['replicaSet' => '<replica set name>'],
);
$uri = 'mongodb://<replica set member>:<port>/?replicaSet=<replica set name>';
$client = new MongoDB\Client($uri);

提示

要在一个节点故障时保持与副本集部署的连接,您可以在连接 URI 中提供多个副本集成员。

要了解更多关于连接到副本集的信息,请参阅连接目标指南中的副本集

以下代码演示了如何为连接到您的MongoDB实例启用TLS。

$client = new MongoDB\Client(
'mongodb://<hostname>:<port>/',
['tls' => true],
);
$uri = 'mongodb://<hostname>:<port>/?tls=true';
$client = new MongoDB\Client($uri);

要了解更多关于启用TLS的信息,请参阅TLS配置指南中的启用TLS

以下代码演示了如何指定CA文件的路径以连接到您的MongoDB实例。

$client = new MongoDB\Client(
'mongodb://<hostname>:<port>/',
['tls' => true, 'tlsCAFile' => '/path/to/ca.pem'],
);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsCAFile=/path/to/ca.pem';
$client = new MongoDB\Client($uri);

要了解更多关于指定CA文件的信息,请参阅TLS配置指南中的指定CA文件

以下代码展示了如何阻止驱动程序联系OCSP端点

$client = new MongoDB\Client(
'mongodb://<hostname>:<port>/',
['tls' => true, 'tlsDisableOCSPEndpointCheck' => true],
);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsDisableOCSPEndpointCheck=true';
$client = new MongoDB\Client($uri);

要了解有关禁用OCSP检查的更多信息,请参阅TLS配置指南中的OCSP

以下代码展示了如何指导驱动程序验证服务器的证书是否与CRL相匹配

$client = new MongoDB\Client(
'mongodb://<hostname>:<port>/',
['tls' => true],
['crl_file' => '/path/to/file.pem'],
);

要了解有关指定CRL的更多信息,请参阅TLS配置指南中的证书吊销列表

以下代码展示了如何指定驱动程序向MongoDB部署呈现的客户端证书

$client = new MongoDB\Client(
'mongodb://<hostname>:<port>/',
['tls' => true, 'tlsCertificateKeyFile' => '/path/to/client.pem'],
);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=/path/to/client.pem';
$client = new MongoDB\Client($uri);

要了解有关指定客户端证书的更多信息,请参阅TLS配置指南中的呈现客户端证书

以下代码展示了如何指定客户端证书的密码

$client = new MongoDB\Client(
'mongodb://<hostname>:<port>/',
[
'tls' => true,
'tlsCertificateKeyFile' => '/path/to/client.pem',
'tlsCertificateKeyFilePassword' => '<password>'
],
);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=/path/to/client.pem&tlsCertificateKeyFilePassword=<password>';
$client = new MongoDB\Client($uri);

重要

在连接 URI 中替换 <password> 占位符时,请确保您百分号编码该值。

要了解更多关于提供密钥文件密码的信息,请参阅 TLS 配置指南中的提供密钥密码

以下代码展示了如何放宽 TLS 约束,这相当于禁用了证书验证主机名验证

$client = new MongoDB\Client(
'mongodb://<hostname>:<port>/',
['tls' => true, 'tlsInsecure' => true],
);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsInsecure=true';
$client = new MongoDB\Client($uri);

要了解更多关于允许不安全的 TLS 的信息,请参阅 TLS 配置指南中的允许不安全的 TLS

警告

tlsInsecure 选项设置为 true 可能会使您的应用程序面临安全风险。启用此选项会使您的应用程序不安全,并且可能容易受到过期证书和冒充有效客户端实例的外部进程的攻击。

以下代码演示了如何禁用证书验证

$client = new MongoDB\Client(
'mongodb://<hostname>:<port>/',
['tls' => true, 'tlsAllowInvalidCertificates' => true],
);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsAllowInvalidCertificates=true';
$client = new MongoDB\Client($uri);

要了解有关禁用证书验证的更多信息,请参阅 TLS 配置指南中的 允许不安全 TLS

以下代码演示了如何禁用主机名验证

$client = new MongoDB\Client(
'mongodb://<hostname>:<port>/',
['tls' => true, 'tlsAllowInvalidHostnames' => true],
);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsAllowInvalidHostnames=true';
$client = new MongoDB\Client($uri);

要了解有关禁用主机名验证的更多信息,请参阅 TLS 配置指南中的 允许不安全 TLS

以下代码展示了如何启用对您的MongoDB实例的稳定API连接。

$driverOptions = ['serverApi' => new MongoDB\Driver\ServerApi('1')];
$client = new MongoDB\Client(
'mongodb://<hostname>:<port>/',
[],
$driverOptions,
);

要了解更多关于稳定API的信息,请参阅稳定API指南

返回

下一步操作