

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

# 在外部配置 适用于 PHP 的 AWS SDK 版本 3 的服务客户端
<a name="configuring-service-clients-ext"></a>

许多配置设置可以通过代码以外的方式来处理。大多数配置设置可以设置为环境变量，也可以在单独的共享 AWS `config`文件中设置。 AWS 共享 `config` 文件可以维护多组独立的设置（称为配置文件），以便为不同的环境或测试提供不同的配置。有关 AWS 共享`credentials`文件`config`和文件的完整讨论，请参阅[https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。

大多数环境变量和共享`config`文件设置都是标准化的，并且是跨 AWS SDKs 工具共享的，以支持不同编程语言和应用程序之间的一致功能。

要查看 SDK 可以从环境变量或配置文件中解析的所有[设置，请参阅AWS SDKs 和工具参考](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html)*指南中的设置参考*。

## 用于客户端配置的配置提供程序链
<a name="configuration-provider-chain"></a>

SDK 会检查几个位置（或来源）以查找配置值。

1. 在代码中或服务客户端本身设置的任何显式设置均优先于其他任何设置。

1. 环境变量
   + 有关设置环境变量的详细信息，请参阅《工具参考指南》*AWS SDKs 和《工具参考指南》*中的[环境变量](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html)。
   + 请注意，您可以在不同作用域层级为 shell 配置环境变量：系统级、用户级，以及特定终端会话级。

1. 共享 `config` 文件和 `credentials` 文件
   + 有关设置这些文件的详细信息，请参阅《工具参考指南》[`config`和《*工具参考指南》中的 “共享AWS SDKs 和`credentials`*文件](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)”。

1. 最后使用 SDK 源代码本身提供的任何默认值。
   + 某些属性（例如“Region”）没有默认值。您必须在代码、环境设置或共享 `config` 文件中明确指定这些属性。如果 SDK 无法解析所需的配置，API 请求在运行时会失败。

除了这个通用配置链外， 适用于 PHP 的 AWS SDK 版本 3 还使用专门的提供者链，包括[凭证提供程序链](guide_credentials_default_chain.md)和[AWS 区域 解析链](aws-php-sdk-region-resolution.md#region-resolution-chain)。这些专门的链会添加其他提供程序，这些提供程序会考虑 SDK 的运行环境。例如，在容器或 EC2 实例中。

## 创建使用外部设置配置的服务客户端
<a name="create-client-ext-conf"></a>

您需要在应用程序中创建一个服务客户端才能与 AWS 服务通信。服务客户是您与之建立联系的重要 AWS 服务纽带，可以处理所有复杂的沟通细节，因此您不必担心。它们会自动处理安全性、错误处理和重试等重要任务，让您可以专注于构建应用程序，而不是处理复杂的技术问题。

### 使用不带参数的构造函数构造服务客户端
<a name="create-client-ext-builder"></a>

如果您需要的所有配置设置都来自外部来源，则可以使用空构造函数来创建服务客户端：

```
require 'vendor/autoload.php';

use Aws\S3\S3Client;

$s3 = new S3Client([]);
```

前面的代码段创建了一个 `S3Client` 实例。在创建过程中，SDK 会按照配置提供程序链依次查找所需的设置。SDK 找到设置值后，就会使用该值。

创建过程中还将使用默认提供 AWS 区域 商链和默认凭证提供者链。在链的某个地方，SDK 必须解析要使用的 AWS 区域 ，并找到使其能够为签名请求检索凭证的设置。如果 SDK 无法找到这些值，则客户端创建失败。

## 适用于 PHP 的 AWS SDK 版本 3 环境变量
<a name="java-ext-config"></a>

除了大多数人支持的[交叉 SDK 设置](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html#settingsPages)外 AWS SDKs， 适用于 PHP 的 AWS SDK 版本 3 还可使用以下环境变量：

**AWS\$1SDK\$1加载\$1非默认\$1配置**  
设置后，此环境变量会指示 SDK 除 AWS `config`文件之外还从`credentials`文件 (`~/.aws/config``~/.aws/credential`) 加载凭证。

**AWS\$1SDK\$1UA\$1APP\$1ID**  
设置自定义应用程序标识符，以包含在 SDK 发出的请求的 User-Agent 标头中。

**AWS\$1SUPPRESS\$1PHP\$1DEPRECATION\$1WARNING**  
 当设置为 true 时，会抑制 SDK 可能生成的 PHP 弃用警告。