
# PHP示例
#### 操作场景
DDS支持通过PHP语言接口来操作数据，通过PHP连接实例的方式有开启SSL认证连接和关闭SSL认证连接两种，其中开启SSL证书连接加密功能，具有更高的安全性。
DDS新实例默认关闭SSL数据加密，开启SSL请参考[开启SSL](https://support.huaweicloud.com/usermanual-dds/dds_03_0074.html#section1)。
本章节主要介绍使用PHP语言连接副本集实例的方法。
#### 前提条件
1. 连接数据库的弹性云服务器必须和DDS实例之间网络互通，可以使用curl命令连接DDS实例服务端的IP和端口号，测试网络连通性。 curl ip:port
   返回"It looks like you are trying to access MongoDB over HTTP on the native driver port."，说明网络互通。
   
2. 如果开启SSL，需要在界面上下载根证书，并上传到弹性云服务器。
 
#### 驱动获取及使用
PHP驱动相关信息：<https://www.php.net/mongodb-driver-manager.construct>
#### 开启和关闭SSL安全连接
- [SSL开启]
  - 使用MongoDB\\Client::__construct()创建client实例。
    ```
    function __construct(
    ?string $uri = null, 
    array $uriOptions = [], 
    array $driverOptions = []
    )
    ```
    
  
  - 通过$uriOptions设置SSL为true，启用SSL连接。通过$driverOptions设置ca_file为CA证书路径，allow_invalid_hostname设置为true。
    ```
    <?php
    require 'vendor/autoload.php'; // include Composer goodies
    $replicaset_url = 'mongodb://rwuser:*****@192.168.***.***:8635,192.168.***.***:8635/test?authSource=admin&replicaSet=replica';
    $test_db = 'test_db';
    $test_coll = 'test_coll';
    // 创建mongoclient。
    $client = new MongoDB\Client(
        $replicaset_url，
        [
            'ssl' => true,
        ],
        [
            "ca_file" => "/path/to/ca.pem",
            "allow_invalid_hostname" => true
        ]
    );
    $collection = $client->$test_db->$test_coll;
    // 插入一条记录。
    $result = $collection->insertOne([
        'username' => 'admin', 
        'email' => 'admin@example.com', 
    ]);
    echo "Object ID: '{$result->getInsertedId()}'", "\n";
    // 查询记录。
    $result = $collection->find(['username' => 'admin']);
    foreach ($result as $entry) {
        echo $entry->_id, ': ', $entry->email, "\n";
    }
    ?>
    ```
    
   
- [SSL关闭]
  ```
  <?php
  require 'vendor/autoload.php'; // include Composer goodies
  $replicaset_url = 'mongodb://rwuser:*****@192.168.***.***:8635,192.168.***.***:8635/test?authSource=admin&replicaSet=replica';
  $test_db = 'test_db';
  $test_coll = 'test_coll';
  // 创建mongoclient。
  $client = new MongoDB\Client($replicaset_url);
  $collection = $client->$test_db->$test_coll;
  // 插入一条记录。
  $result = $collection->insertOne([
      'username' => 'admin', 
      'email' => 'admin@example.com', 
  ]);
  echo "Object ID: '{$result->getInsertedId()}'", "\n";
  // 查询记录。
  $result = $collection->find(['username' => 'admin']);
  foreach ($result as $entry) {
      echo $entry->_id, ': ', $entry->email, "\n";
  }
  ?>
  ```
![](https://support.huaweicloud.com/usermanual-dds/public_sys-resources/note_3.0-zh-cn.png)
- URL中的认证数据库必须为"admin"，即"authSource=admin"。
- rwuser账户的认证数据库必须为"admin"，之后再切换至业务数据库。
 
#### 相关文档
[设置SSL数据加密](https://support.huaweicloud.com/usermanual-dds/dds_03_0074.html)
[通过程序代码连接副本集实例](https://support.huaweicloud.com/usermanual-dds/dds_03_0339.html)
