

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 第 3 適用於 PHP 的 AWS SDK 版的用戶端建構函式選項
<a name="guide_configuration"></a>

用戶端建構函數選項可在用戶端建構函數中提供，或提供給 [https://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.Sdk.html](https://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.Sdk.html)類別。提供給特定類型用戶端的選項陣列可能不同，取決於您所建立的用戶端。這些自訂用戶端組態選項的說明如各用戶端的 [API 文件](https://docs.aws.amazon.com/aws-sdk-php/latest/)所述。

如果您未明確提供用戶端所需的用戶端建構函數選項，適用於 PHP 的 SDK 會從環境變數或 AWS 組態檔案尋找值。所有用戶端都需要登入資料提供者值和 AWS 區域 值，因此您必須將這些值設定為建構函數選項或外部。

依預設，正在檢查的組態檔案會位於您主目錄中的 `.aws/config`，通常為 `~/.aws/config`。但是，您可以使用環境變數 `AWS_CONFIG_FILE` 來設訂預設組態檔案的位置。例如，如果您使用 限制檔案存取特定目錄，這可能會很有用`open_basedir`。

如需共用 AWS 和`credentials`檔案位置`config`和格式的詳細資訊，請參閱 *AWS SDKs和工具參考指南*中的[組態](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)。

如需您可以在組態檔案或環境變數中 AWS 設定的所有全域組態設定的詳細資訊，請參閱 SDK [和工具參考指南中的組態和身分驗證設定](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html)參考。 *AWS SDKs *

**Topics**
+ [

## api\$1provider
](#api-provider)
+ [

## 登入資料
](#config_credentials)
+ [

## 偵錯
](#debug)
+ [

## 統計資料
](#config-stats)
+ [

## 端點
](#endpoint)
+ [

## endpoint\$1provider
](#endpoint-provider)
+ [

## endpoint\$1discovery
](#endpoint-discovery)
+ [

## 處理常式
](#handler)
+ [

## http
](#config-http)
+ [

## http\$1handler
](#http-handler)
+ [

## profile
](#profile)
+ [

## region
](#cfg-region)
+ [

## retries
](#config-retries)
+ [

## 結構描述
](#scheme)
+ [

## 服務
](#service)
+ [

## signature\$1provider
](#signature-provider)
+ [

## signature\$1version
](#signature-version)
+ [

## ua\$1append
](#ua-append)
+ [

## use\$1aws\$1shared\$1config\$1files
](#use-aws-shared-config-files)
+ [

## validate
](#validate)
+ [

## version
](#cfg-version)

下列範例示範如何將選項傳遞至 Amazon S3 用戶端建構函式。

```
use Aws\S3\S3Client;

$options = [
    'region'            => 'us-west-2',
    'version'           => '2006-03-01',
    'signature_version' => 'v4'
];

$s3Client = new S3Client($options);
```

如需建構用戶端的詳細資訊[建立基本服務用戶端](making-service-requests.md#creating-a-client)，請參閱。

## api\$1provider
<a name="api-provider"></a>

Type  
 `callable` 

PHP 可呼叫接受類型、服務和版本參數，而且會傳回一系列對應的組態資料。類型值可以是 `api`、`waiter` 或 `paginator` 其中之一。

在預設情況下，開發套件使用 `Aws\Api\FileSystemApiProvider` 執行個體，它會從開發套件的 `src/data` 資料夾載入 API 檔案。

## 登入資料
<a name="config_credentials"></a>

Type  
 `array|Aws\CacheInterface|Aws\Credentials\CredentialsInterface|bool|callable` 

傳遞 `Aws\Credentials\CredentialsInterface` 物件以使用特定的登入資料執行個體。以下指定應使用 IAM Identity Center 憑證提供者。此提供者也稱為 SSO 登入資料提供者。

```
$credentials = Aws\Credentials\CredentialProvider::sso('profile default');

$s3 = new Aws\S3\S3Client([
    'region'      => 'us-west-2',
    'credentials' => $credentials
]);
```

如果您使用具名設定檔，請在上一個範例中將設定檔的名稱替換為「`default`」。若要進一步了解如何設定具名設定檔，請參閱 SDK [`config`和工具參考指南中的共用和`credentials`檔案](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。 *AWS SDKs *

如果您未指定要使用的登入資料提供者，並依賴登入資料提供者鏈結，則驗證失敗所產生的錯誤訊息通常是通用的。它從正在檢查有效登入資料的來源清單中的最後一個提供者產生，這可能不是您嘗試使用的提供者。當您指定要使用的登入資料提供者時，任何產生的錯誤訊息都會更實用且更相關，因為它只來自該提供者。若要進一步了解檢查登入資料的來源鏈，請參閱 *AWS SDKs和工具參考指南*中的[登入資料提供者鏈](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)。

傳遞 `false` 以使用 null 登入資料，而且不簽署請求。

```
$s3 = new Aws\S3\S3Client([
    'region'      => 'us-west-2',
    'credentials' => false
]);
```

傳遞可呼叫的[登入資料供應商](guide_credentials.md#cred-provider-defn-php)函數以使用函數建立登入資料。

```
use Aws\Credentials\CredentialProvider;

// Only load credentials from environment variables
$provider = CredentialProvider::env();

$s3 = new Aws\S3\S3Client([
    'region'      => 'us-west-2',
    'credentials' => $provider
]);
```

傳遞 `Aws\CacheInterface` 執行個體以快取預設供應商鏈跨多個程序傳回的值。

```
use Aws\Credentials\CredentialProvider;
use Aws\PsrCacheAdapter;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;


$cache = new PsrCacheAdapter(new FilesystemAdapter);
$provider = CredentialProvider::defaultProvider();
$cachedProvider = CredentialProvider::cache($provider, $cache);

$s3 = new Aws\S3\S3Client([
    'region' => 'us-west-2',
    'credentials' => $cachedProvider
]);
```

您可以在第 [3 適用於 PHP 的 AWS SDK 版的登入資料指南中找到有關提供登入](guide_credentials.md)資料給用戶端的詳細資訊。

**注意**  
登入資料會在被使用時延遲載入和驗證。

## 偵錯
<a name="debug"></a>

Type  
 `bool|array` 

輸出各個傳輸的偵錯資訊。偵錯資訊包含有關交易在準備及透過網路傳送時每個狀態變更的資訊。偵錯輸出也包含有關用戶端使用的特定 HTTP 處理常式的資訊 (例如，偵錯 cURL 輸出)。

設定為 `true` 可在傳送請求時顯示偵錯資訊。

```
$s3 = new Aws\S3\S3Client([
    'region'  => 'us-west-2',
    'debug'   => true
]);

// Perform an operation to see the debug output
$s3->listBuckets();
```

或者，您可以使用以下金鑰提供關聯陣列。

**logfn (可呼叫)**  
以日誌訊息叫用的函數。根據預設，會使用 PHP 的 `echo` 函數。

**stream\$1size (int)**  
當串流的大小大於此數字時，將不會記錄串流資料。設定為 `0` 將不記錄任何串流資料。

**scrub\$1auth (bool)**  
設定為 `false`以停用從記錄的訊息中清除身分驗證資料 （表示您的 AWS 存取金鑰 ID 和簽章將傳遞至 `logfn`)。

**http (bool)**  
設為 `false` 以停用較低層級 HTTP 處理器的「偵錯」功能 (例如，verbose cURL 輸出)。

**auth\$1headers (陣列)**  
設定為您要替換的標頭金鑰值映射，對應到您希望取代它們的值。除非 `scrub_auth` 設定為 `true`，否則將不會使用這些值。

**auth\$1strings (陣列)**  
設定為規則表達式金鑰值映射以對應到它們的替換。如果 `scrub_auth` 設定為 `true`，這些值將由身分驗證資料清除程式使用。

```
$s3 = new Aws\S3\S3Client([
    'region'  => 'us-west-2',
    'debug'   => [
        'logfn'        => function ($msg) { echo $msg . "\n"; },
        'stream_size'  => 0,
        'scrub_auth'   => true,
        'http'         => true,
        'auth_headers' => [
            'X-My-Secret-Header' => '[REDACTED]',
        ],
        'auth_strings' => [
            '/SuperSecret=[A-Za-z0-9]{20}/i' => 'SuperSecret=[REDACTED]',
        ],
    ]
]);

// Perform an operation to see the debug output
$s3->listBuckets();
```

**注意**  
此選項也會輸出`http`偵錯選項所產生的基礎 HTTP 處理常式資訊。偵錯輸出在診斷 適用於 PHP 的 AWS SDK的問題時非常有用。請在開啟開發套件的問題時，提供隔離故障案例的偵錯輸出。

## 統計資料
<a name="config-stats"></a>

Type  
 `bool|array` 

將傳輸統計資料繫結至開發套件操作傳回的錯誤和結果。

設定為 `true` 以收集已傳送之請求的傳輸統計資料。

```
$s3 = new Aws\S3\S3Client([
    'region'  => 'us-west-2',
    'stats'   => true
]);

// Perform an operation
$result = $s3->listBuckets();
// Inspect the stats
$stats = $result['@metadata']['transferStats'];
```

或者，您可以使用以下金鑰提供關聯陣列。

**重試 (bool)**  
設定為 `false`以停用嘗試重試的報告。在預設情況下，會收集並傳回重試統計資料。

**http (bool)**  
設定為 `true` 以啟用從較低層級的 HTTP 配接器收集統計資料 (例如，GuzzleHttpTransferStats 中傳回的值)。HTTP 處理常式必須支援 \$1\$1on\$1transfer\$1stats 選項才能使其生效。HTTP 統計資料會做為關聯陣列的已編製索引陣列傳回；每個關聯陣列皆包含針對用戶端 HTTP 處理器請求所傳回的傳輸統計資料。預設為停用。  
如果重試請求，將會傳回每個請求的傳輸統計資料，其中 `$result['@metadata']['transferStats']['http'][0]` 會包含第一個請求的統計資料，`$result['@metadata']['transferStats']['http'][1]` 則會包含第二個請求的統計資料，以此類推。

**計時器 (bool)**  
設定為 `true` 以啟用命令計時器，它會報告用於操作的總計時鐘時間，以秒為單位。預設為停用。

```
$s3 = new Aws\S3\S3Client([
    'region'  => 'us-west-2',
    'stats'   => [
        'retries'      => true,
        'timer'        => false,
        'http'         => true,
    ]
]);

// Perform an operation
$result = $s3->listBuckets();
// Inspect the HTTP transfer stats
$stats = $result['@metadata']['transferStats']['http'];
// Inspect the number of retries attempted
$stats = $result['@metadata']['transferStats']['retries_attempted'];
// Inspect the total backoff delay inserted between retries
$stats = $result['@metadata']['transferStats']['total_retry_delay'];
```

## 端點
<a name="endpoint"></a>

Type  
 `string` 

Web 服務的完整 URI 名稱。對於使用帳戶特定端點的服務，例如 [AWS Elemental MediaConvert](https://docs.aws.amazon.com/mediaconvert/latest/ug/) ，這是必要的。對於這些服務，請使用 `describeEndpoints`方法請求此端點。

只有在連線至自訂端點 （例如 Amazon S3 或 [Amazon DynamoDB Local](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html) 的本機版本） 時，才需要此操作。

以下是連線至 Amazon DynamoDB Local 的範例：

```
$client = new Aws\DynamoDb\DynamoDbClient([
    'version'  => '2012-08-10',
    'region'   => 'us-east-1',
    'endpoint' => 'http://localhost:8000'
]);
```

如需可用[AWS 區域和端點](https://docs.aws.amazon.com/general/latest/gr/rande.html)的清單，請參閱 AWS 區域和端點。

## endpoint\$1provider
<a name="endpoint-provider"></a>

Type  
 `Aws\EndpointV2\EndpointProviderV2|callable` 

EndpointProviderV2 或 PHP 可呼叫的選用執行個體，可接受選項雜湊，包括「服務」和「區域」金鑰。其會傳回 `NULL` 或端點資料的雜湊，其中需要 “endpoint” 鍵。

以下是如何建立最小端點提供者的範例。

```
$provider = function (array $params) {
    if ($params['service'] == 'foo') {
        return ['endpoint' => $params['region'] . '.example.com'];
    }
    // Return null when the provider cannot handle the parameters
    return null;
});
```

## endpoint\$1discovery
<a name="endpoint-discovery"></a>

Type  
 `array|Aws\CacheInterface|Aws\EndpointDiscovery\ConfigurationInterface|callable` 

端點探索會識別支援端點探索之服務 API 的正確端點並連接至其中。如需支援但不需要端點探索的服務，請在用戶端建立期間啟用 `endpoint_discovery`。如果服務不支援端點探索，此組態會遭到忽略。

 `Aws\EndpointDiscovery\ConfigurationInterface` 

選用組態供應商，可自動連接到服務 API 的適當端點來進行該服務指定的操作。

`Aws\EndpointDiscovery\Configuration` 物件接受兩個選項，包括布林值 “enabled”，此值表示已啟用端點探索啟用；以及整數 “cache\$1limit”，此值表示在端點快取中的金鑰數上限。

對於每個建立的用戶端，請傳遞 `Aws\EndpointDiscovery\Configuration` 物件以使用端點探索的特定組態。

```
use Aws\EndpointDiscovery\Configuration;
use Aws\S3\S3Client;

$enabled = true;
$cache_limit = 1000;

$config = new Aws\EndpointDiscovery\Configuration (
    $enabled,
    $cache_limit
);

$s3 = new Aws\S3\S3Client([
    'region' => 'us-east-2',
    'endpoint_discovery' => $config,

]);
```

傳遞 `Aws\CacheInterface` 執行個體以快取端點探索跨多個程序傳回的值。

```
use Aws\DoctrineCacheAdapter;
use Aws\S3\S3Client;
use Doctrine\Common\Cache\ApcuCache;

$s3 = new S3Client([
    'region'      => 'us-west-2',
    'endpoint_discovery' => new DoctrineCacheAdapter(new ApcuCache),
]);
```

將陣列傳遞至端點探索。

```
use Aws\S3\S3Client;

$s3 = new S3Client([
    'region'      => 'us-west-2',
    'endpoint_discovery' => [
        'enabled' => true,
        'cache_limit' => 1000
    ],
]);
```

## 處理常式
<a name="handler"></a>

Type  
 `callable` 

接受命令物件和請求物件的處理常式，而且會傳回承諾 (`GuzzleHttp\Promise\PromiseInterface`)，其中包含 `Aws\ResultInterface` 物件 `Aws\Exception\AwsException`。處理常式不會接受下一個處理常式，因為其為終端機且預期要完成命令。如果沒有提供處理常式，將使用預設的 Guzzle 處理常式。

您可以使用 `Aws\MockHandler` 以傳回模擬結果或擲回模擬例外狀況。您將結果或例外狀況排入佇列，MockHandler 將以 FIFO 順序將它們移出佇列。

```
use Aws\Result;
use Aws\MockHandler;
use Aws\DynamoDb\DynamoDbClient;
use Aws\CommandInterface;
use Psr\Http\Message\RequestInterface;
use Aws\Exception\AwsException;

$mock = new MockHandler();

// Return a mocked result
$mock->append(new Result(['foo' => 'bar']));

// You can provide a function to invoke; here we throw a mock exception
$mock->append(function (CommandInterface $cmd, RequestInterface $req) {
    return new AwsException('Mock exception', $cmd);
});

// Create a client with the mock handler
$client = new DynamoDbClient([
    'region' => 'us-east-1',
    'handler' => $mock
]);

// Result object response will contain ['foo' => 'bar']
$result = $client->listTables();

// This will throw the exception that was enqueued
$client->listTables();
```

## http
<a name="config-http"></a>

Type  
 `array` 

設定為一系列的 HTTP 選項並套用到開發套件建立的 HTTP 請求和傳輸。

開發套件支援以下組態選項：

### cert
<a name="http-cert"></a>

Type  
 `string|array` 

指定 PEM 格式的用戶端憑證。
+ 設定為字串，僅用於憑證檔案的路徑。

```
use Aws\S3\S3Client;

$client = new S3Client([
    'region'  => 'us-west-2',
    'http'    => ['cert' => '/path/to/cert.pem']
]);
```
+ 設定為陣列，其中包含路徑和密碼。

```
use Aws\S3\S3Client;

$client = new S3Client([
    'region'  => 'us-west-2',
    'http'    => [
        'cert' => ['/path/to/cert.pem', 'password']
    ]
]);
```

### connect\$1timeout
<a name="http-connect-timeout"></a>

浮點數，描述在嘗試連接到伺服器時等待的秒數。使用 `0` 以無限期等待 (預設的行為)。

```
use Aws\DynamoDb\DynamoDbClient;

// Timeout after attempting to connect for 5 seconds
$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http'    => [
        'connect_timeout' => 5
    ]
]);
```

### 偵錯
<a name="http-debug"></a>

Type  
 `bool|resource` 

指示基礎 HTTP 處理常式輸出偵錯資訊。不同 HTTP 處理常式提供的偵錯資訊會有不同。
+ 傳遞 `true` 將偵錯輸出寫入至 STDOUT。
+ 傳遞 `resource` 所傳回的 `fopen` 以便將偵錯輸出寫入至特定 PHP 串流資源。

### decode\$1content
<a name="http-decode-content"></a>

Type  
 `bool` 

指示基礎 HTTP 處理常式擴大壓縮回應的主體。在未啟用時，可使用 `GuzzleHttp\Psr7\InflateStream` 擴大壓縮回應的主體。

**注意**  
在軟體開發套件的預設 HTTP 處理器中，根據預設會啟用內容解碼。由於回溯相容性因素，此預設無法變更。如果您在 Amazon S3 中存放壓縮檔案，建議您在 S3 用戶端層級停用內容解碼。  

```
use Aws\S3\S3Client;
use GuzzleHttp\Psr7\InflateStream;

$client = new S3Client([
    'region'  => 'us-west-2',
    'http'    => ['decode_content' => false],
]);

$result = $client->getObject([
    'Bucket' => 'amzn-s3-demo-bucket',
    'Key'    => 'massize_gzipped_file.tgz'
]);

$compressedBody = $result['Body']; // This content is still gzipped
$inflatedBody = new InflateStream($result['Body']); // This is now readable
```

### 延遲
<a name="http-delay"></a>

Type  
 `int` 

在傳送請求之前的延遲毫秒數。這通常用於重試請求之前的延遲。

### expect
<a name="http-expect"></a>

Type  
 `bool|string` 

系統會將此選項傳遞至基礎 HTTP 處理常式。在預設情況下，當請求內文超過 1 MB 時會設定 Expect: 100-Continue 標頭。`true` 或 `false` 會啟用或停用所有請求的標頭。如果使用的是整數，只有內文超過此設定的請求會使用該標頭。使用方式為整數時，如果內文大小不明，則會傳送 Expect 標頭。

**警告**  
停用 Expect 標頭可避免該服務傳回身分驗證或其他錯誤。此選項的設定請務必謹慎進行。

### 進度
<a name="http-progress"></a>

Type  
 `callable` 

定義傳輸進度進行時叫用的函數。此函數接受以下引數：

1. 預期要下載的位元組總數。

1. 目前已下載的位元組數。

1. 預期要上傳的位元組數。

1. 目前已上傳的位元組數。

```
use Aws\S3\S3Client;

$client = new S3Client([
    'region'  => 'us-west-2'
]);

// Apply the http option to a specific command using the "@http"
// command parameter
$result = $client->getObject([
    'Bucket' => 'amzn-s3-demo-bucket',
    'Key'    => 'large.mov',
    '@http' => [
        'progress' => function ($expectedDl, $dl, $expectedUl, $ul) {
            printf(
                "%s of %s downloaded, %s of %s uploaded.\n",
                $expectedDl,
                $dl,
                $expectedUl,
                $ul
            );
        }
    ]
]);
```

### proxy
<a name="http-proxy"></a>

Type  
 `string|array` 

您可以使用 `proxy`選項，透過代理連線到 AWS 服務。
+ 提供字串值以連接到所有 URI 類型的代理。代理字串值可以包含結構描述、使用者名稱和密碼。例如 `"http://username:password@192.168.16.1:10"`。
+ 提供代理設定的關聯陣列，其中的鍵是 URI 的結構描述，而其值是指定 URI 的代理 (亦即，您可以為 ”http” 和 “https” 端點提供不同的代理)。

```
use Aws\DynamoDb\DynamoDbClient;

// Send requests through a single proxy
$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http'    => [
        'proxy' => 'http://192.168.16.1:10'
    ]
]);

// Send requests through a different proxy per scheme
$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http'    => [
        'proxy' => [
            'http' => 'tcp://192.168.16.1:10',
            'https' => 'tcp://192.168.16.1:11',
        ]
    ]
]);
```

您可以使用 `HTTP_PROXY` 環境變數來設定 “http” 特定通訊協定的代理，以及使用 `HTTPS_PROXY` 環境變數來設定 “https” 特定的代理。

### 接收
<a name="http-sink"></a>

Type  
 `resource|string|Psr\Http\Message\StreamInterface` 

`sink` 選項控制將操作的回應資料下載至何處。
+ 提供 `resource` 傳回的 `fopen` 以便將回應內文下載至 PHP 串流。
+ 提供磁碟上的檔案路徑做為 `string` 值，以便將回應內文下載至磁碟上的特定檔案。
+ 提供 `Psr\Http\Message\StreamInterface` 以便將回應內文下載至特定 PSR 串流物件。

**注意**  
依據預設，開發套件會將回應內文下載至 PHP 臨時串流。這表示資料會保持在記憶體中，直到內文的大小達到 2 MB，此時資料將寫入磁碟上的臨時檔案。

### 同步
<a name="http-sync"></a>

Type  
 `bool` 

`synchronous` 選項會通知您要封鎖結果的基礎 HTTP 處理常式。

### 串流
<a name="http-stream"></a>

Type  
 `bool` 

設定為 `true` 以告知您想要 Web 服務串流回應內文的基礎 HTTP 處理常式，而不是一開始就下載它。例如，此選項在 Amazon S3 串流包裝函式類別中依賴，以確保資料串流。

### timeout
<a name="http-timeout"></a>

Type  
 `float` 

浮點數，描述請求的逾時 (以秒為單位)。使用 `0` 以無限期等待 (預設的行為)。

```
use Aws\DynamoDb\DynamoDbClient;

// Timeout after 5 seconds
$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http'    => [
        'timeout' => 5
    ]
]);
```

### 驗證
<a name="http-verify"></a>

Type  
 `bool|string` 

您可以使用 `verify` `http` 選項自訂開發套件的對等 SSL/TLS 憑證驗證行為。
+ 設定為 `true` 以啟用 SSL/TLS 對等憑證驗證，並使用作業系統提供的預設 CA 套件。
+ 設定為 `false` 以停用對等憑證驗證。(這是不安全的！)
+ 設定為字串以提供 CA 憑證套件的路徑，以使用自訂 CA 套件來啟用驗證。

如果您的系統找不到 CA 套件，您會接收到錯誤，請將 CA 套件的路徑提供給軟體開發套件。如果您不需要特定 CA 套件，Mozilla 會提供常用的 CA 套件，您可以在[這裡](https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt)下載 (這是由 cURL 的維護者所維護)。一旦您的磁碟上有 CA 套件之後，即可設定 `openssl.cafile` PHP .ini 設定以指向該檔案的路徑，如此可讓您省略 `verify` 請求選項。您可以在 [cURL 網站](http://curl.haxx.se/docs/sslcerts.html)找到 SSL 憑證的更多詳細資訊。

```
use Aws\DynamoDb\DynamoDbClient;

// Use a custom CA bundle
$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http'    => [
        'verify' => '/path/to/my/cert.pem'
    ]
]);

// Disable SSL/TLS verification
$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http'    => [
        'verify' => false
    ]
]);
```

## http\$1handler
<a name="http-handler"></a>

Type  
 `callable` 

`http_handler` 選項用於整合開發套件與其他 HTTP 用戶端。`http_handler` 選項是函數，可接受 `Psr\Http\Message\RequestInterface` 物件和套用至命令的多種 `http` 選項，並傳回 `GuzzleHttp\Promise\PromiseInterface` 物件履行的 `Psr\Http\Message\ResponseInterface` 物件或遭到拒絕並附帶以下例外狀況資料：
+  `exception` - (`\Exception`) 遇到的例外狀況。
+  `response` - (`Psr\Http\Message\ResponseInterface`) 接收到的回應 (如果有的話)。
+  `connection_error` - (bool) 設定為 `true` 將錯誤標記為連線錯誤。如有需要，將此值設定為 `true` 也可讓開發套件自動重試操作。

開發套件藉由將提供的 `http_handler` 與 `handler` 物件包裝在一起，自動將指定的 `http_handler` 轉換為正常的 `Aws\WrappedHttpHandler` 選項。

根據預設，軟體開發套件會使用 Guzzle 做為其 HTTP 處理器。您可以在這裡提供不同的 HTTP 處理器，或者為 Guzzle 客戶端提供您自己的自訂定義選項。

 **設定 TLS 版本** 

其中一種使用案例是使用 Curl 設定 Guzzle 使用的 TLS 版本 (假設 Curl 已安裝在您的環境中)。請注意 Curl 的[版本限制條件](https://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html)，了解其支援的 TLS 版本。根據預設會使用最新版本。如果明確設定 TLS 版本，而遠端伺服器不支援此版本，則會產生錯誤，而不是使用較早的 TLS 版本。

您可以藉由將 `debug` 用戶端選項設為 true 並檢查 SSL 連線輸出，來判斷用於指定用戶端操作的 TLS 版本。該行可能看起來如下：`SSL connection using TLSv1.2`

使用 Guzzle 6 設定 TLS 1.2 的範例：

```
use Aws\DynamoDb\DynamoDbClient;
use Aws\Handler\GuzzleV6\GuzzleHandler;
use GuzzleHttp\Client;

$handler = new GuzzleHandler(
    new Client([
        'curl' => [
            CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2
        ]
    ])
);

$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http_handler' => $handler
]);
```

**注意**  
`http_handler` 選項會取代任何提供的 `handler` 選項。

## profile
<a name="profile"></a>

Type  
 `string` 

「設定檔」選項指定從 HOME 目錄中的登入資料檔案 （通常是 ) 建立 AWS 登入資料時要使用的設定檔`~/.aws/credentials`。此設定將覆寫 `AWS_PROFILE` 環境變數。

**注意**  
當您指定「設定檔」選項時，會忽略該`"credentials"`選項，並忽略 AWS 組態檔案中的登入資料相關設定 （通常為 `~/.aws/config`)。

```
// Use the "production" profile from your credentials file
$ec2 = new Aws\Ec2\Ec2Client([
    'version' => '2014-10-01',
    'region'  => 'us-west-2',
    'profile' => 'production'
]);
```

如需設定[登入資料和 .ini 檔案格式的詳細資訊，請參閱第 3 適用於 PHP 的 AWS SDK 版](guide_credentials.md)的登入資料。

## region
<a name="cfg-region"></a>

Type  
 `string` 

必要  
true

AWS 要連線的區域。如需可用區域的清單，請參閱 區域[AWS 和端點](https://docs.aws.amazon.com/general/latest/gr/rande.html)。

```
// Set the Region to the EU (Frankfurt) Region
$s3 = new Aws\S3\S3Client([
    'region'  => 'eu-central-1',
    'version' => '2006-03-01'
]);
```

## retries
<a name="config-retries"></a>

Type  
 `int|array|Aws\CacheInterface|Aws\Retry\ConfigurationInterface|callable` 

預設  
 `int(3)` 

設定用戶端的重試模式和允許重試次數上限。傳遞 `0` 以停用重試。

三種重試模式為：
+ `legacy` - 預設舊版重試實作
+ `standard` - 新增重試配額系統，以防止不太可能成功的重試 
+  `adaptive` - 在標準模式上建立，新增一個用戶端速率限制器。請注意，此模式為實驗性質。

重試的組態包含模式和每個請求所使用的嘗試次數上限。組態可以按照下列優先順序在幾個不同的位置進行設定。

 **優先順序** 

重試組態的優先順序如下 (1 覆寫 2-3 等等)：

1. 用戶端組態選項

1. 環境變數

1. AWS 共用組態檔案

 **環境變數** 
+  `AWS_RETRY_MODE` - 設定為 `legacy`、`standard` 或 `adaptive`。
+  `AWS_MAX_ATTEMPTS` - 設定為每個請求的最大嘗試次數的整數值

 **共用組態檔金鑰** 
+  `retry_mode` - 設定為 `legacy`、`standard` 或 `adaptive`。
+  `max_attempts` - 設定為每個請求的最大嘗試次數的整數值

 **用戶端組態** 

下列範例會停用 Amazon DynamoDB 用戶端的重試。

```
// Disable retries by setting "retries" to 0
$client = new Aws\DynamoDb\DynamoDbClient([
    'version' => '2012-08-10',
    'region'  => 'us-west-2',
    'retries' => 0
]);
```

下面的例子傳遞一個整數，這將預設為 `legacy` 模式與傳遞的重試次數

```
// Disable retries by setting "retries" to 0
$client = new Aws\DynamoDb\DynamoDbClient([
    'version' => '2012-08-10',
    'region'  => 'us-west-2',
    'retries' => 6
]);
```

**該 `Aws\Retry\Configuration` 物件會接受兩個參數，重試模式**  
和每個請求的嘗試次數上限的整數。這個範例會傳入一個

 `Aws\Retry\Configuration` 物件進行重試組態。

```
use Aws\EndpointDiscovery\Configuration;
use Aws\S3\S3Client;

$enabled = true;
$cache_limit = 1000;

$config = new Aws\Retry\Configuration('adaptive', 10);

$s3 = new Aws\S3\S3Client([
    'region' => 'us-east-2',
    'retries' => $config,
]);
```

這個例子在一個陣列中傳遞重試配置。

```
use Aws\S3\S3Client;

$s3 = new S3Client([
    'region' => 'us-west-2',
    'retries' => [
        'mode' => 'standard',
        'max_attempts' => 7
    ],
]);
```

此範例會傳遞 `Aws\CacheInterface` 的執行個體，以快取預設重試組態提供者所傳回的值。

```
use Aws\DoctrineCacheAdapter;
use Aws\S3\S3Client;
use Doctrine\Common\Cache\ApcuCache;

$s3 = new S3Client([
    'region' => 'us-west-2',
    'endpoint_discovery' => new DoctrineCacheAdapter(new ApcuCache),
]);
```

## 結構描述
<a name="scheme"></a>

Type  
 `string` 

預設  
 `string(5) "https"` 

當連線時要使用的 URI 結構描述。依據預設，軟體開發套件會使用 “https” 端點 (即使用 SSL/TLS 連線)。您可以藉由將 `scheme` 設為 “http”，來嘗試透過未加密的 “http” 端點連線到服務。

```
$s3 = new Aws\S3\S3Client([
    'version' => '2006-03-01',
    'region'  => 'us-west-2',
    'scheme'  => 'http'
]);
```

如需端點清單，以及服務是否支援 `http`機制，請參閱 [AWS 區域和端點](https://docs.aws.amazon.com/general/latest/gr/rande.html)。

## 服務
<a name="service"></a>

Type  
 `string` 

必要  
true

要使用的名稱服務。依據預設，使用開發套件提供的用戶端 (亦即 `Aws\S3\S3Client`) 時，將提供此值。在測試尚未發佈至開發套件，但您已在磁碟上提供的服務時，此選項將很有用。

## signature\$1provider
<a name="signature-provider"></a>

Type  
 `callable` 

可呼叫，可接受簽章版本名稱 （例如 `v4`)、服務名稱和 AWS 區域，並傳回`Aws\Signature\SignatureInterface`物件，或`NULL`如果提供者能夠為指定參數建立簽署者。此供應商用於建立由用戶端使用的簽署者。

`Aws\Signature\SignatureProvider` 類別中的開發套件提供各種函數，可用於建立自訂的簽章供應商。

## signature\$1version
<a name="signature-version"></a>

Type  
 `string` 

字串，表示要搭配服務 (例如，`v4` 等) 使用的自訂簽章版本。如有需要，每個操作簽章版本皆可能覆寫此請求的簽章版本。

下列範例示範如何設定 Amazon S3 用戶端以使用[簽章第 4 版](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)：

```
// Set a preferred signature version
$s3 = new Aws\S3\S3Client([
    'version'           => '2006-03-01',
    'region'            => 'us-west-2',
    'signature_version' => 'v4'
]);
```

**注意**  
您的用戶端使用的 `signature_provider` 必須能夠建立您提供的 `signature_version` 選項。軟體開發套件根據預設使用的 `signature_provider` 可建立 “v4” 和 “anonymous” 簽章版本的簽章物件。

## ua\$1append
<a name="ua-append"></a>

Type  
 `string|string[]` 

預設  
 `[]` 

新增到使用者代理程式字串的字串或字串陣列已傳送至 HTTP 處理常式。

## use\$1aws\$1shared\$1config\$1files
<a name="use-aws-shared-config-files"></a>

Type  
 `bool|array` 

預設  
 `bool(true)` 

設定為 false 以停用檢查「\$1/.aws/config」和「\$1/.aws/credentials」中的共用組態檔案。這將覆寫 AWS\$1CONFIG\$1FILE 環境變數。

## validate
<a name="validate"></a>

Type  
 `bool|array` 

預設  
 `bool(true)` 

設定為 `false` 以停用用戶端側參數驗證。您可能會發現關閉驗證會稍微提高用戶端效能，但差異極為輕微。

```
// Disable client-side validation
$s3 = new Aws\S3\S3Client([
    'version'  => '2006-03-01',
    'region'   => 'eu-west-1',
    'validate' => false
]);
```

設定為驗證選項的關聯陣列，以啟用特定驗證限制：
+  `required` - 驗證必要的參數是否存在 (預設為開啟)。
+  `min` - 驗證值的最小長度 (預設為開啟)。
+  `max` - 驗證值的最大長度值。
+  `pattern` - 驗證值符合規則表達式。

```
// Validate only that required values are present
$s3 = new Aws\S3\S3Client([
    'version'  => '2006-03-01',
    'region'   => 'eu-west-1',
    'validate' => ['required' => true]
]);
```

## version
<a name="cfg-version"></a>

Type  
 `string` 

必要  
false

此選項指定要使用的 Web 服務版本 （例如 `2006-03-01`)。

從 SDK 的 3.277.10 版開始，不需要「版本」選項。如果您未指定「版本」選項，軟體開發套件會使用最新版本的服務用戶端。

當您建立服務用戶端時，兩種情況都需要「版本」參數。
+ 您使用的 PHP 開發套件版本早於 3.277.10。
+ 您使用 3.277.10 版或更新版本，並想要為服務用戶端使用「最新」以外的版本。

例如，下列程式碼片段使用 開發套件的 3.279.7 版，但不是 的最新版本`Ec2Client`。

```
$ec2Client = new \Aws\Ec2\Ec2Client([
    'version' => '2015-10-01',
    'region' => 'us-west-2'
]);
```

指定版本限制可確保您的程式碼將不會受重大服務變更的影響。

您可以在每個用戶端的 [API 文件頁面](https://docs.aws.amazon.com/aws-sdk-php/v3/api/index.html)上找到可用的 API 版本清單。如果您無法載入特定的 API 版本，可能需要更新您的開發套件。