

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 适用于 PHP 的 Amazon SDK 版本 3 中的 Amazon S3 多区域客户端
<a name="s3-multiregion-client"></a>

 适用于 PHP 的 Amazon SDK 版本 3 提供了一个通用的多区域客户端，可与任何服务一起使用。这使用户能够通过向任何命令提供`@region`输入参数来指定向哪个 Amazon 区域发送命令。此外，SDK 为 Amazon S3 提供的多区域客户端可针对特定的 S3 错误智能响应，并据此重新路由命令。它支持用户使用同一客户端与多个区域通信。对于使用[适用于 PHP 的 Amazon SDK 版本 3 的 Amazon S3 Stream Wrapper](s3-stream-wrapper.md)（存储桶位于多个区域）的用户来说，这是一项特别有用的功能。

## 基本用法
<a name="basic-usage"></a>

无论使用标准 S3 客户端还是多区域客户端，Amazon S3 客户端的基本用法模式都是相同的。命令级别的唯一用法区别是，可以使用`@region`输入参数指定 Amazon 区域。

```
// Create a multi-region S3 client
$s3Client = (new \Aws\Sdk)->createMultiRegionS3(['version' => 'latest']);

// You can also use the client constructor
$s3Client = new \Aws\S3\S3MultiRegionClient([
    'version' => 'latest',
    // Any Region specified while creating the client will be used as the
    // default Region
    'region' => 'us-west-2',
]);

// Get the contents of a bucket
$objects = $s3Client->listObjects(['Bucket' => $bucketName]);

// If you would like to specify the Region to which to send a command, do so
// by providing an @region parameter
$objects = $s3Client->listObjects([
    'Bucket' => $bucketName,
    '@region' => 'eu-west-1',
]);
```

**重要**  
如果使用多区域 Amazon S3 客户端，您不会遇到永久性的重定向异常。如果命令发送到错误的区域，标准 Amazon S3 客户端会抛出 `Aws\S3\Exception\PermanentRedirectException` 的实例。而多区域客户端会将该命令分派到正确的区域。

## 存储桶区域缓存
<a name="bucket-region-cache"></a>

Amazon S3 多区域客户端维护给定存储桶所在 Amazon 区域的内部缓存。默认情况下，每个客户端都有它自己的内存中的缓存。要在客户端或进程之间共享缓存，请提供 `Aws\CacheInterface` 的一个实例，作为多区域客户端的 `bucket_region_cache` 选项。

```
use Aws\DoctrineCacheAdapter;
use Aws\Sdk;
use Doctrine\Common\Cache\ApcuCache;

$sdk = new Aws\Sdk([
    'version' => 'latest',
    'region' => 'us-west-2',
    'S3' => [
        'bucket_region_cache' => new DoctrineCacheAdapter(new ApcuCache),
    ],
]);
```