

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS SDK for PHP バージョン 3 を使用した Amazon S3 の例
<a name="s3-examples"></a>

Amazon Simple Storage Service (Amazon S3) は、拡張性の高いクラウドストレージを提供するウェブサービスです。Amazon S3 は簡単に使用できるオブジェクトストレージです。シンプルなウェブサービスインターフェイスが用意されており、ウェブ上のどこからでも容量に関係なくデータを保存、取得できます。

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

**Topics**
+ [認証情報](#examplecredentials)
+ [Amazon S3 バケットの作成と使用](s3-examples-creating-buckets.md)
+ [Amazon S3 バケットへのアクセス許可を管理する](s3-examples-access-permissions.md)
+ [Amazon S3 バケットを設定する](s3-examples-configuring-a-bucket.md)
+ [Amazon S3 マルチパートアップロード](s3-multipart-upload.md)
+ [Amazon S3 の署名付き URL](s3-presigned-url.md)
+ [S3 の署名付き POST の作成](s3-presigned-post.md)
+ [静的ウェブホストとして Amazon S3 バケットを使用する](s3-examples-static-web-host.md)
+ [Amazon S3 バケットのポリシーで作業する](s3-examples-bucket-policies.md)
+ [S3 アクセスポイントの ARN の使用](s3-examples-access-point-arn.md)
+ [マルチリージョンアクセスポイントの使用](s3-multi-region-access-points.md)

# AWS SDK for PHP バージョン 3 での Amazon S3 バケットの作成と使用
<a name="s3-examples-creating-buckets"></a>

以下の例では、次の方法を示しています。
+ [ListBuckets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#listbuckets) を使用した、リクエストの認証送信者が所有するバケットリストの取得。
+ [CreateBucket](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createbucket) を使用した、新しいバケットの作成。
+ [PutObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject) を使用した、バケットへのオブジェクトの追加。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

 **インポート**。

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

use Aws\S3\S3Client;
```

## バケットの一覧表示
<a name="list-buckets"></a>

次のコードのように、PHP ファイルを作成します。まず AWS リージョンとバージョンを指定する AWS.S3 クライアントサービスを作成します。次に `listBuckets` メソッドを呼び出します。これはリクエストの送信者が所有しているすべての Amazon S3 バケットをバケット配列として返します。

 **サンプルコード** 

```
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

//Listing all S3 Bucket
$buckets = $s3Client->listBuckets();
foreach ($buckets['Buckets'] as $bucket) {
    echo $bucket['Name'] . "\n";
}
```

## バケットを作成する
<a name="create-a-bucket"></a>

次のコードのように、PHP ファイルを作成します。まず AWS リージョンとバージョンを指定する AWS.S3 クライアントサービスを作成します。次に、`createBucket` メソッドを、パラメーターの配列を使用して呼び出します。唯一の必須のフィールドはキー 'Bucket' で、作成するバケット名の文字列値を指定します。ただし、AWS リージョンで 'CreateBucketConfiguration' フィールドを指定できます。成功した場合、このメソッドはバケットの「Location」を返します。

 **サンプルコード** 

```
function createBucket($s3Client, $bucketName)
{
    try {
        $result = $s3Client->createBucket([
            'Bucket' => $bucketName,
        ]);
        return 'The bucket\'s location is: ' .
            $result['Location'] . '. ' .
            'The bucket\'s effective URI is: ' .
            $result['@metadata']['effectiveUri'];
    } catch (AwsException $e) {
        return 'Error: ' . $e->getAwsErrorMessage();
    }
}

function createTheBucket()
{
    $s3Client = new S3Client([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => '2006-03-01'
    ]);

    echo createBucket($s3Client, 'amzn-s3-demo-bucket');
}

// Uncomment the following line to run this code in an AWS account.
// createTheBucket();
```

## バケットにオブジェクトを配置する
<a name="put-an-object-in-a-bucket"></a>

新しいバケットにファイルを追加するには、次のコードを使用して PHP ファイルを作成します。

コマンドラインでこのファイルを実行し、ファイルをアップロードするバケットの名前を文字列、続いてアップロードするファイルの完全なファイルパスを渡します。

 **サンプルコード** 

```
$USAGE = "\n" .
    "To run this example, supply the name of an S3 bucket and a file to\n" .
    "upload to it.\n" .
    "\n" .
    "Ex: php PutObject.php <bucketname> <filename>\n";

if (count($argv) <= 2) {
    echo $USAGE;
    exit();
}

$bucket = $argv[1];
$file_Path = $argv[2];
$key = basename($argv[2]);

try {
    //Create a S3Client
    $s3Client = new S3Client([
        'profile' => 'default',
        'region' => 'us-west-2',
        'version' => '2006-03-01'
    ]);
    $result = $s3Client->putObject([
        'Bucket' => $bucket,
        'Key' => $key,
        'SourceFile' => $file_Path,
    ]);
} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";
}
```

# AWS SDK for PHP バージョン 3 による Amazon S3 バケットへのアクセス許可の管理
<a name="s3-examples-access-permissions"></a>

アクセスコントロールリスト (ACL) はリソースベースのアクセスポリシーオプションの 1 つであり、バケットとオブジェクトへのアクセスを管理するために使用できます。ACL を使用して、基本的な読み取り/書き込みアクセス許可を他の AWS アカウントに付与できます。詳細については、「[ACL によるアクセス管理](https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [GetBucketAcl](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketacl) を使用した、バケットに対するアクセスコントロールポリシーの取得。
+ ACL、[PutBucketAcl](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketacl) を使用した、バケットのアクセス許可の設定。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## アクセスコントロールリストポリシーの取得と設定
<a name="get-and-set-an-access-control-list-policy"></a>

 **インポート**。

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

use Aws\S3\S3Client;  
use Aws\Exception\AwsException;
```

 **サンプルコード** 

```
// Create a S3Client 
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

// Gets the access control policy for a bucket
$bucket = 'amzn-s3-demo-bucket';
try {
    $resp = $s3Client->getBucketAcl([
        'Bucket' => $bucket
    ]);
    echo "Succeed in retrieving bucket ACL as follows: \n";
    var_dump($resp);
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}

// Sets the permissions on a bucket using access control lists (ACL).
$params = [
    'ACL' => 'public-read',
    'AccessControlPolicy' => [
        // Information can be retrieved from `getBucketAcl` response
        'Grants' => [
            [
                'Grantee' => [
                    'DisplayName' => '<string>',
                    'EmailAddress' => '<string>',
                    'ID' => '<string>',
                    'Type' => 'CanonicalUser',
                    'URI' => '<string>',
                ],
                'Permission' => 'FULL_CONTROL',
            ],
            // ...
        ],
        'Owner' => [
            'DisplayName' => '<string>',
            'ID' => '<string>',
        ],
    ],
    'Bucket' => $bucket,
];

try {
    $resp = $s3Client->putBucketAcl($params);
    echo "Succeed in setting bucket ACL.\n";
} catch (AwsException $e) {
    // Display error message
    echo $e->getMessage();
    echo "\n";
}
```

# AWS SDK for PHP バージョン 3 による Amazon S3 バケットの設定
<a name="s3-examples-configuring-a-bucket"></a>

Cross−Origin Resource Sharing (CORS) は、特定のドメインにロードされたクライアントウェブアプリケーションが異なるドメイン内のリソースと通信する方法を定義します。Amazon S3 の CORS のサポートによって、Amazon S3 でリッチなクライアント側ウェブアプリケーションを構築し、Amazon S3 リソースへのクロスオリジンアクセスを選択的に許可できます。

Amazon S3 バケットで CORS 設定を使用する方法の詳細については、「[Cross-Origin Resource Sharing (CORS)](https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [GetBucketCors](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketcors) を使用して、バケットの CORS 設定を取得する
+ [PutBucketCors](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketcors) を使用して、バケットの CORS 設定を設定する

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## CORS 設定を取得する
<a name="get-the-cors-configuration"></a>

次のコードのように、PHP ファイルを作成します。AWS.S3 クライアントサービスを作成してから、`getBucketCors` メソッドを呼び出して、CORS 設定を取得するバケットを指定します。

必要なパラメーターは、選択したバケットの名前のみです。そのバケットに CORS 設定が存在する場合は、その設定が Amazon S3 によって [CORSRules オブジェクト](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#shape-corsrule)として返されます。

 **インポート**。

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

use Aws\Exception\AwsException;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
$client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

try {
    $result = $client->getBucketCors([
        'Bucket' => $bucketName, // REQUIRED
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## CORS 設定を設定する
<a name="set-the-cors-configuration"></a>

次のコードのように、PHP ファイルを作成します。AWS.S3 クライアントサービスを作成してから、`putBucketCors` メソッドを呼び出して、CORS 設定を設定するバケットを指定し、CORSConfiguration を [CORSRules JSON オブジェクト](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#shape-corsrule)として指定します。

 **インポート**。

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

use Aws\Exception\AwsException;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
$client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

try {
    $result = $client->putBucketCors([
        'Bucket' => $bucketName, // REQUIRED
        'CORSConfiguration' => [ // REQUIRED
            'CORSRules' => [ // REQUIRED
                [
                    'AllowedHeaders' => ['Authorization'],
                    'AllowedMethods' => ['POST', 'GET', 'PUT'], // REQUIRED
                    'AllowedOrigins' => ['*'], // REQUIRED
                    'ExposeHeaders' => [],
                    'MaxAgeSeconds' => 3000
                ],
            ],
        ]
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

# AWS SDK for PHP バージョン 3 での Amazon S3 マルチパートアップロードの使用
<a name="s3-multipart-upload"></a>

1 回の `PutObject` 操作では、合計サイズが 5 GB 以内のオブジェクトをアップロードできます。ただし、マルチパートアップロード手法 (たとえば、`CreateMultipartUpload`、`UploadPart`、`CompleteMultipartUpload`、`AbortMultipartUpload`) を使用すると、合計サイズが 5 MB～5 TB のオブジェクトをアップロードできます。

以下の例では、次の方法を示しています。
+ [ObjectUploader](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.ObjectUploader.html) を使用して、Amazon S3 にオブジェクトをアップロードする。
+ [MultipartUploader](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.MultipartUploader.html) を使用して、Amazon S3 オブジェクトのマルチパートアップロードを作成する。
+ [ObjectCopier](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.ObjectCopier.html) を使用して、Amazon S3 のある場所から別の場所にオブジェクトをコピーする。

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

## オブジェクトアップローダー
<a name="object-uploader"></a>

`PutObject` または `MultipartUploader` がタスクに最適かどうかが不明な場合は、`ObjectUploader` を使用します。`ObjectUploader` は、ペイロードサイズに基づいて `PutObject` または `MultipartUploader` を使用して大きなファイルを Amazon S3 にアップロードします。

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

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\ObjectUploader;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
// Create an S3Client.
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-east-2',
    'version' => '2006-03-01'
]);

$bucket = 'your-bucket';
$key = 'my-file.zip';

// Use a stream instead of a file path.
$source = fopen('/path/to/large/file.zip', 'rb');

$uploader = new ObjectUploader(
    $s3Client,
    $bucket,
    $key,
    $source
);

do {
    try {
        $result = $uploader->upload();
        if ($result["@metadata"]["statusCode"] == '200') {
            print('<p>File successfully uploaded to ' . $result["ObjectURL"] . '.</p>');
        }
        print($result);
        // If the SDK chooses a multipart upload, try again if there is an exception.
        // Unlike PutObject calls, multipart upload calls are not automatically retried.
    } catch (MultipartUploadException $e) {
        rewind($source);
        $uploader = new MultipartUploader($s3Client, $source, [
            'state' => $e->getState(),
        ]);
    }
} while (!isset($result));

fclose($source);
```

### 設定
<a name="object-uploader-configuration"></a>

`ObjectUploader` オブジェクトのコンストラクタでは次の引数を指定できます。

**`$client`**  
転送の実行に使用する `Aws\ClientInterface` オブジェクト。これは `Aws\S3\S3Client` のインスタンスである必要があります。

**`$bucket`**  
(`string`、*必須*) オブジェクトのアップロード先のバケットの名前。

**`$key`**  
(`string`、*必須*) アップロードするオブジェクトで使用するキー。

**`$body`**  
(`mixed`、*必須*) アップロードするオブジェクトデータ。`StreamInterface`、PHP ストリームリソース、またはアップロードするデータ文字列のいずれでもかまいません。

**`$acl`**  
(`string`) をアップロードするオブジェクトに設定するアクセスコントロールリスト (ACL)。デフォルトでは、オブジェクトはプライベートです。

**`$options`**  
マルチパートアップロードの設定オプションの連想配列。有効な設定オプションは次のとおりです。    
**`add_content_md5`**  
(`bool`) true に設定すると、アップロードの MD5 チェックサムが自動的に計算されます。  
**`mup_threshold`**  
(`int`、*デフォルト*:`int(16777216)`) ファイルサイズのバイト数。ファイルサイズがこの制限を超えると、マルチパートアップロードが使用されます。  
**`before_complete`**  
(`callable`) `CompleteMultipartUpload` オペレーションの前に呼び出すコールバック。このコールバックは、`function (Aws\Command $command) {...}` のような関数の署名を持っている必要があります。`CommandInterface` オブジェクトに追加できるパラメータについては、[CompleteMultipartUpload API リファレンス](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#completemultipartupload)を参照してください。  
**`before_initiate`**  
(`callable`) `CreateMultipartUpload` オペレーションの前に呼び出すコールバック。このコールバックは、`function (Aws\Command $command) {...}` のような関数の署名を持っている必要があります。ファイルサイズが `mup_threshold` 値を超えた場合、SDK はこのコールバックを呼び出します。`CommandInterface` オブジェクトに追加できるパラメータについては、[CreateMultipartUpload API リファレンス](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createmultipartupload)を参照してください。  
**`before_upload`**  
(`callable`) すべての `UploadPart` または `PutObject` オペレーションの前に呼び出すコールバック。このコールバックは、`function (Aws\Command $command) {...}` のような関数の署名を持っている必要があります。ファイルサイズが `mup_threshold` 値以下の場合、SDK はこのコールバックを呼び出します。`PutObject` リクエストに適用できるパラメータについては、[PutObject API リファレンス](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject)を参照してください。`UploadPart` リクエストに適用されるパラメータについては、[UploadPart API リファレンス](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#uploadpart)を参照してください。SDK は、 `CommandInterface` オブジェクトで表されるオペレーションに適用されないパラメータを無視します。  
**`concurrency`**  
(`int`、*デフォルト*: `int(3)`) マルチパートアップロード中に許容される同時 `UploadPart` オペレーションの最大数。  
**`part_size`**  
(`int`、*デフォルト*: `int(5242880)`) マルチパートアップロードの実行時に使用するパートサイズ (バイト単位)。値は、5 MB 以上かつ 5 GB 以内である必要があります。  
**`state`**  
(`Aws\Multipart\UploadState`) マルチパートアップロードの状態を表すオブジェクトであり、前回のアップロードを再開するために使用されます。このオプションを指定している場合、`$bucket` および `$key` 引数と `part_size` オプションは無視されます。  
**`params`**  
各サブコマンドの設定オプションを提供する連想配列。例えば、次のようになります。  

```
new ObjectUploader($bucket, $key, $body, $acl, ['params' => ['CacheControl' => <some_value>])
```

## MultipartUploader
<a name="multipartuploader"></a>

マルチパートアップロードは、大容量オブジェクトのアップロードを効率よく行えるように設計されています。マルチパートアップロードでは、オブジェクトを分割して、別々に任意の順序で並行してアップロードできます。

Amazon S3 のユーザーには、100 MB を超えるオブジェクトに対してマルチパートアップロードを使用することをお勧めします。

## MultipartUploader オブジェクト
<a name="multipartuploader-object"></a>

SDK には、マルチパートアップロードのプロセスを簡素化する特別な `MultipartUploader` オブジェクトがあります。

 **インポート** 

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

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

// Use multipart upload
$source = '/path/to/large/file.zip';
$uploader = new MultipartUploader($s3Client, $source, [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
]);

try {
    $result = $uploader->upload();
    echo "Upload complete: {$result['ObjectURL']}\n";
} catch (MultipartUploadException $e) {
    echo $e->getMessage() . "\n";
}
```

このアップローダーでは、指定されたソースと設定に基づいてパートデータのジェネレーターが作成され、すべてのパートのアップロードが試行されます。一部のパートアップロードが失敗すると、アップローダーによってソースデータ全体が読み取られるまで、失敗したパートのアップロードが続行されます。その後、アップローダーは失敗したパートのアップロードを再試行するか、アップロードに失敗したパートに関する情報を含む例外をスローします。

## マルチパートアップロードのカスタマイズ
<a name="customizing-a-multipart-upload"></a>

マルチパートアップローダーによって実行される `CreateMultipartUpload`、`UploadPart`、`CompleteMultipartUpload` オペレーションに対して、コンストラクタに渡すコールバックを介してカスタムオプションを設定できます。

 **インポート** 

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

use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
// Create an S3Client
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

// Customizing a multipart upload
$source = '/path/to/large/file.zip';
$uploader = new MultipartUploader($s3Client, $source, [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
    'before_initiate' => function (Command $command) {
        // $command is a CreateMultipartUpload operation
        $command['CacheControl'] = 'max-age=3600';
    },
    'before_upload' => function (Command $command) {
        // $command is an UploadPart operation
        $command['RequestPayer'] = 'requester';
    },
    'before_complete' => function (Command $command) {
        // $command is a CompleteMultipartUpload operation
        $command['RequestPayer'] = 'requester';
    },
]);
```

### パートのアップロード間の手動のガベージコレクション
<a name="manual-garbage-collection-between-part-uploads"></a>

大きなアップロードでメモリ制限に達している場合、メモリ制限に達したときに [PHP ガベージコレクター](https://www.php.net/manual/en/features.gc.php)で収集されていない SDK によって生成された巡回参照が原因である可能性があります。オペレーション間で収集アルゴリズムを手動で呼び出すと、制限に達する前にサイクルを収集できます。次の例では、各パートをアップロードする前にコールバックを使用して、収集アルゴリズムを呼び出します。ガベージコレクターを呼び出してもパフォーマンスに影響することはなく、最適な使用はお客様のユースケースと環境によって異なることに注意してください。

```
$uploader = new MultipartUploader($client, $source, [
   'bucket' => 'your-bucket',
   'key' => 'your-key',
   'before_upload' => function(\Aws\Command $command) {
      gc_collect_cycles();
   }
]);
```

## エラーからの復旧
<a name="recovering-from-errors"></a>

マルチパートアップロードのプロセスでエラーが発生すると `MultipartUploadException` がスローされます。この例外では、マルチパートアップロードの進行状況に関する情報が含まれている `UploadState` オブジェクトへのアクセスが提供されます。`UploadState` を使用して、完了できなかったアップロードを再開できます。

 **インポート** 

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

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
// Create an S3Client
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

$source = '/path/to/large/file.zip';
$uploader = new MultipartUploader($s3Client, $source, [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
]);

//Recover from errors
do {
    try {
        $result = $uploader->upload();
    } catch (MultipartUploadException $e) {
        $uploader = new MultipartUploader($s3Client, $source, [
            'state' => $e->getState(),
        ]);
    }
} while (!isset($result));

//Abort a multipart upload if failed
try {
    $result = $uploader->upload();
} catch (MultipartUploadException $e) {
    // State contains the "Bucket", "Key", and "UploadId"
    $params = $e->getState()->getId();
    $result = $s3Client->abortMultipartUpload($params);
}
```

`UploadState` によるアップロードの再開では、まだアップロードされていないパートのアップロードが試行されます。この状態オブジェクトでは、パートが連続していない場合であっても、欠落しているパートが追跡されます。アップローダーは、指定されたソースファイルで、アップロードする必要があるパートに属するバイト範囲まで読み取りまたはシークします。

 `UploadState` オブジェクトはシリアル化可能であるため、別のプロセスでアップロードを再開することもできます。また、例外を処理していない場合でも、`UploadState` を呼び出すことによって `$uploader->getState()` オブジェクトを取得できます。

**重要**  
`MultipartUploader` にソースとして渡されるストリームは、アップロード前に自動的には巻き戻しされません。そのため、前述の例のようなループでファイルパスではなくストリームを使用している場合は、`catch` ブロック内で `$source` 変数をリセットします。

 **インポート** 

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

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
// Create an S3Client
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

//Using stream instead of file path
$source = fopen('/path/to/large/file.zip', 'rb');
$uploader = new MultipartUploader($s3Client, $source, [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
]);

do {
    try {
        $result = $uploader->upload();
    } catch (MultipartUploadException $e) {
        rewind($source);
        $uploader = new MultipartUploader($s3Client, $source, [
            'state' => $e->getState(),
        ]);
    }
} while (!isset($result));
fclose($source);
```

### マルチパートアップロードの中止
<a name="aborting-a-multipart-upload"></a>

マルチパートアップロードは、`UploadState` オブジェクトに含まれた `UploadId` を取得し、`abortMultipartUpload` に渡すことで中止できます。

```
try {
    $result = $uploader->upload();
} catch (MultipartUploadException $e) {
    // State contains the "Bucket", "Key", and "UploadId"
    $params = $e->getState()->getId();
    $result = $s3Client->abortMultipartUpload($params);
}
```

## 非同期マルチパートアップロード
<a name="asynchronous-multipart-uploads"></a>

`upload()` で `MultipartUploader` を呼び出すとリクエストがブロックされます。非同期コンテキストを使用している場合は、マルチパートアップロードの [promise](guide_promises.md) を取得できます。

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

use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
// Create an S3Client
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

$source = '/path/to/large/file.zip';
$uploader = new MultipartUploader($s3Client, $source, [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
]);

$promise = $uploader->promise();
```

### 設定
<a name="asynchronous-multipart-uploads-configuration"></a>

`MultipartUploader` オブジェクトのコンストラクタでは次の引数を指定できます。

** `$client` **  
転送の実行に使用する `Aws\ClientInterface` オブジェクト。これは `Aws\S3\S3Client` のインスタンスである必要があります。

** `$source` **  
アップロードするソースデータ。これは、パスや URL (例: `/path/to/file.jpg`)、リソースハンドル (例: `fopen('/path/to/file.jpg', 'r)`)、[PSR-7 ストリーム](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Psr.Http.Message.StreamInterface.html)のインスタンスのいずれかです。

** `$config` **  
マルチパートアップロードの設定オプションの連想配列。  
有効な設定オプションは次のとおりです。    
** `acl` **  
(`string`) をアップロードするオブジェクトに設定するアクセスコントロールリスト (ACL)。デフォルトでは、オブジェクトはプライベートです。  
** `before_complete` **  
(`callable`) `CompleteMultipartUpload` オペレーションの前に呼び出すコールバック。このコールバックは、`function (Aws\Command $command) {...}` のような関数の署名を持っている必要があります。  
** `before_initiate` **  
(`callable`) `CreateMultipartUpload` オペレーションの前に呼び出すコールバック。このコールバックは、`function (Aws\Command $command) {...}` のような関数の署名を持っている必要があります。  
** `before_upload` **  
(`callable`) すべての `UploadPart` オペレーションの前に呼び出すコールバック。このコールバックは、`function (Aws\Command $command) {...}` のような関数の署名を持っている必要があります。  
** `bucket` **  
(`string`、*必須*) オブジェクトのアップロード先のバケットの名前。  
** `concurrency` **  
(`int`、*デフォルト*: `int(5)`) マルチパートアップロード中に許容される同時 `UploadPart` オペレーションの最大数。  
** `key` **  
(`string`、*必須*) アップロードするオブジェクトで使用するキー。  
** `part_size` **  
(`int`、*デフォルト*: `int(5242880)`) マルチパートアップロードの実行時に使用するパートサイズ (バイト単位)。5 MB 以上かつ 5 GB 以内である必要があります。  
** `state` **  
(`Aws\Multipart\UploadState`) マルチパートアップロードの状態を表すオブジェクトであり、前回のアップロードを再開するために使用されます。このオプションを指定している場合、`bucket`、`key`、`part_size` オプションは無視されます。  
**`add_content_md5`**  
(`boolean`) true に設定すると、アップロードの MD5 チェックサムが自動的に計算されます。  
**`params`**  
各サブコマンドの設定オプションを提供する連想配列。例えば、次のようになります。  

```
new MultipartUploader($client, $source, ['params' => ['CacheControl' => <some_value>]])
```

## マルチパートコピー
<a name="multipart-copies"></a>

には、 と同様の方法で使用される`MultipartCopy`オブジェクト AWS SDK for PHP も含まれていますが`MultipartUploader`、Amazon S3 内で 5 GB ～ 5 TB のサイズのオブジェクトをコピーするように設計されています。

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

use Aws\Exception\MultipartUploadException;
use Aws\S3\MultipartCopy;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
// Create an S3Client
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

//Copy objects within S3
$copier = new MultipartCopy($s3Client, '/bucket/key?versionId=foo', [
    'bucket' => 'your-bucket',
    'key' => 'my-file.zip',
]);

try {
    $result = $copier->copy();
    echo "Copy complete: {$result['ObjectURL']}\n";
} catch (MultipartUploadException $e) {
    echo $e->getMessage() . "\n";
}
```

# AWS SDK for PHP バージョン 3 を使用した Amazon S3 の署名付き URL
<a name="s3-presigned-url"></a>

Authorization HTTP ヘッダーを使用する代わりに、必要な情報をクエリ文字列パラメーターとして渡すことで、特定の種類のリクエストを認証できます。これは、サードパーティーのブラウザで、リクエストのプロキシを行わずにプライベートの Amazon S3 データに直接アクセスさせる場合に便利です。これを行うには、「署名付き」のリクエストを作成し、他のユーザーが使用できる URL としてエンコードします。さらに、署名付きのリクエストは、有効期限を指定することで制限できます。

## HTTP GET リクエストの署名付き URL の作成
<a name="s3-presigned-url-get"></a>

次のコード例は、SDK for PHP を使用して HTTP GET リクエストの署名付き URL を作成する方法を示しています。

```
<?php

require 'vendor/autoload.php';

use Aws\S3\S3Client;

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

// Supply a CommandInterface object and an expires parameter to the `createPresignedRequest` method.
$request = $s3Client->createPresignedRequest(
    $s3Client->getCommand('GetObject', [
        'Bucket' => 'amzn-s3-demo-bucket',
        'Key' => 'demo-key',
    ]),
    '+1 hour'
);

// From the resulting RequestInterface object, you can get the URL.
$presignedUrl = (string) $request->getUri();

echo $presignedUrl;
```

[`createPresignedRequest` メソッドの API リファレンス](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.S3Client.html#method_createPresignedRequest)に詳細が記載されています。

他のユーザーは `$presignedUrl` 値を使用して、次の 1 時間以内にオブジェクトを取得できます。たとえば、ブラウザを使用して HTTP GET リクエストが実行されると、S3 サービスには、呼び出しが署名付き URL を作成したユーザーからのものであることが表示されます。

## HTTP PUT リクエストの署名付き URL の作成
<a name="s3-presigned-url-put"></a>

次のコード例は、SDK for PHP を使用して HTTP PUT リクエストの署名付き URL を作成する方法を示しています。

```
<?php

require 'vendor/autoload.php';

use Aws\S3\S3Client;

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

$request = $s3Client->createPresignedRequest(
    $s3Client->getCommand('PutObject', [
        'Bucket' => 'amzn-s3-demo-bucket',
        'Key' => 'demo-key',
    ]),
    '+1 hour'
);

// From the resulting RequestInterface object, you can get the URL.
$presignedUrl = (string) $request->getUri();
```

他のユーザーが HTTP PUT リクエストで署名付き URL を使用してファイルをアップロードできるようになりました。

```
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;

// ...

function uploadWithPresignedUrl($presignedUrl, $filePath, $s3Client): ?Response
{
    // Get the HTTP handler from the S3 client.
    $handler = $s3Client->getHandlerList()->resolve();
    
    // Create a stream from the file.
    $fileStream = new Stream(fopen($filePath, 'r'));
    
    // Create the request.
    $request = new Request(
        'PUT',
        $presignedUrl,
        [
            'Content-Type' => mime_content_type($filePath),
            'Content-Length' => filesize($filePath)
        ],
        $fileStream
    );
    
    // Send the request using the handler.
    try {
        $promise = $handler($request, []);
        $response = $promise->wait();
        return $response;
    } catch (Exception $e) {
        echo "Error uploading file: " . $e->getMessage() . "\n";
        return null;
    }
}
```

# AWS SDK for PHP バージョン 3 での Amazon S3 の署名付き POST
<a name="s3-presigned-post"></a>

署名付き URL と同様に、署名付き POST を使用すると、AWS 認証情報を付与しないでユーザーに書き込みアクセスを与えることができます。[AwsS3PostObjectV4](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.PostObjectV4.html) のインスタンスを使用して、署名付き POST フォームを作成できます。

以下の例では、次の方法を示しています。
+ [PostObjectV4](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.PostObjectV4.html) を使用して、S3 オブジェクトの POST アップロード形式のデータを取得します。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

**注記**  
`PostObjectV4` は、AWS IAM アイデンティティセンターからの認証情報では機能しません。

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## PostObjectV4 の作成
<a name="create-postobjectv4"></a>

`PostObjectV4` のインスタンスを作成するには、次を提供する必要があります。
+ `Aws\S3\S3Client` のインスタンス 
+ バケット
+ フォーム入力フィールドの連想配列
+ ポリシー条件の配列 (「Amazon Simple Storage Service ユーザーガイド」の「[ポリシーの作成](https://docs.aws.amazon.com/AmazonS3/latest/dev/HTTPPOSTForms.html)」を参照)。
+ ポリシーの有効期限文字列 (省略可能、デフォルトは 1 時間)。

 **インポート**。

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

use Aws\S3\PostObjectV4;
use Aws\S3\S3Client;
```

 **サンプルコード** 

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

use Aws\S3\PostObjectV4;
use Aws\S3\S3Client;

$client = new S3Client([
    'profile' => 'default',
    'region' => 'us-east-1',
]);
$bucket = 'amzn-s3-demo-bucket10';
$starts_with = 'user/eric/';
$client->listBuckets();

// Set defaults for form input fields.
$formInputs = ['acl' => 'public-read'];

// Construct an array of conditions for policy.
$options = [
    ['acl' => 'public-read'],
    ['bucket' => $bucket],
    ['starts-with', '$key', $starts_with],
];

// Set an expiration time (optional).
$expires = '+2 hours';

$postObject = new PostObjectV4(
    $client,
    $bucket,
    $formInputs,
    $options,
    $expires
);

// Get attributes for the HTML form, for example, action, method, enctype.
$formAttributes = $postObject->getFormAttributes();

// Get attributes for the HTML form values.
$formInputs = $postObject->getFormInputs();
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>PHP</title>
</head>
<body>
<form action="<?php echo $formAttributes['action'] ?>" method="<?php echo $formAttributes['method'] ?>"
      enctype="<?php echo $formAttributes['enctype'] ?>">
    <label id="key">
        <input hidden type="text" name="key" value="<?php echo $starts_with ?><?php echo $formInputs['key'] ?>"/>
    </label>
    <h3>$formInputs:</h3>
    acl: <label id="acl">
        <input readonly type="text" name="acl" value="<?php echo $formInputs['acl'] ?>"/>
    </label><br/>
    X-Amz-Credential: <label id="credential">
        <input readonly type="text" name="X-Amz-Credential" value="<?php echo $formInputs['X-Amz-Credential'] ?>"/>
    </label><br/>
    X-Amz-Algorithm: <label id="algorithm">
        <input readonly type="text" name="X-Amz-Algorithm" value="<?php echo $formInputs['X-Amz-Algorithm'] ?>"/>
    </label><br/>
    X-Amz-Date: <label id="date">
        <input readonly type="text" name="X-Amz-Date" value="<?php echo $formInputs['X-Amz-Date'] ?>"/>
    </label><br/><br/><br/>
    Policy: <label id="policy">
        <input readonly type="text" name="Policy" value="<?php echo $formInputs['Policy'] ?>"/>
    </label><br/>
    X-Amz-Signature: <label id="signature">
        <input readonly type="text" name="X-Amz-Signature" value="<?php echo $formInputs['X-Amz-Signature'] ?>"/>
    </label><br/><br/>
    <h3>Choose file:</h3>
    <input type="file" name="file"/> <br/><br/>
    <h3>Upload file:</h3>
    <input type="submit" name="submit" value="Upload to Amazon S3"/>
</form>
</body>
</html>
```

# AWS SDK for PHP バージョン 3 での静的ウェブホストとしての Amazon S3 バケットの使用
<a name="s3-examples-static-web-host"></a>

静的ウェブサイトを Amazon S3 上でホスティングすることができます。詳細については、「[Amazon S3 での静的ウェブサイトのホスティング](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [GetBucketWebsite](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketwebsite) を使用した、バケットのウェブサイト設定の取得。
+ [PutBucketWebsite](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketwebsite) を使用した、バケットのウェブサイト設定のセットアップ。
+ [DeleteBucketWebsite](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#deletebucketwebsite) を使用した、バケットのウェブサイト設定の削除。

AWS SDK for PHP バージョン 3 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="credentials-s3-examples-static-web-host"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します。AWS SDK for PHP バージョン 3 の認証情報を参照してください。

## バケットのウェブサイト設定の取得、設定および削除
<a name="get-set-and-delete-the-website-configuration-for-a-bucket"></a>

 **インポート**。

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

use Aws\Exception\AwsException;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

// Retrieving the Bucket Website Configuration
$bucket = 'amzn-s3-demo-bucket';
try {
    $resp = $s3Client->getBucketWebsite([
        'Bucket' => $bucket
    ]);
    echo "Succeed in retrieving website configuration for bucket: " . $bucket . "\n";
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}

// Setting a Bucket Website Configuration
$params = [
    'Bucket' => $bucket,
    'WebsiteConfiguration' => [
        'ErrorDocument' => [
            'Key' => 'foo',
        ],
        'IndexDocument' => [
            'Suffix' => 'bar',
        ],
    ]
];

try {
    $resp = $s3Client->putBucketWebsite($params);
    echo "Succeed in setting bucket website configuration.\n";
} catch (AwsException $e) {
    // Display error message
    echo $e->getMessage();
    echo "\n";
}

// Deleting a Bucket Website Configuration
try {
    $resp = $s3Client->deleteBucketWebsite([
        'Bucket' => $bucket
    ]);
    echo "Succeed in deleting policy for bucket: " . $bucket . "\n";
} catch (AwsException $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}
```

# AWS SDK for PHP バージョン 3 での Amazon S3 バケットポリシーの使用
<a name="s3-examples-bucket-policies"></a>

バケットポリシーを使用して、Amazon S3 リソースに対するアクセス許可を付与できます。詳細については、「[バケットポリシーとユーザーポリシーの使用](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html)」を参照してください。

以下の例では、次の方法を示しています。
+ [GetBucketPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketpolicy) を使用した、指定バケットのポリシーの取得。
+ [PutBucketPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketpolicy) を使用した、バケットでのポリシーの置き換え。
+ [DeleteBucketPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#deletebucketpolicy) を使用したバケットからのポリシーの削除。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

## バケットのポリシーの取得、削除、および置き換え
<a name="get-delete-and-replace-a-policy-on-a-bucket"></a>

 **インポート**。

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

use Aws\Exception\AwsException;
use Aws\S3\S3Client;
```

 **サンプルコード** 

```
$s3Client = new S3Client([
    'profile' => 'default',
    'region' => 'us-west-2',
    'version' => '2006-03-01'
]);

$bucket = 'amzn-s3-demo-bucket';

// Get the policy of a specific bucket
try {
    $resp = $s3Client->getBucketPolicy([
        'Bucket' => $bucket
    ]);
    echo "Succeed in receiving bucket policy:\n";
    echo $resp->get('Policy');
    echo "\n";
} catch (AwsException $e) {
    // Display error message
    echo $e->getMessage();
    echo "\n";
}

// Deletes the policy from the bucket
try {
    $resp = $s3Client->deleteBucketPolicy([
        'Bucket' => $bucket
    ]);
    echo "Succeed in deleting policy of bucket: " . $bucket . "\n";
} catch (AwsException $e) {
    // Display error message
    echo $e->getMessage();
    echo "\n";
}

// Replaces a policy on the bucket
try {
    $resp = $s3Client->putBucketPolicy([
        'Bucket' => $bucket,
        'Policy' => 'foo policy',
    ]);
    echo "Succeed in put a policy on bucket: " . $bucket . "\n";
} catch (AwsException $e) {
    // Display error message
    echo $e->getMessage();
    echo "\n";
}
```

# AWS SDK for PHP バージョン 3 での S3 アクセスポイント ARN の使用
<a name="s3-examples-access-point-arn"></a>

S3 では、S3 バケットと対話する新しい方法であるアクセスポイントが導入されました。アクセスポイントには、バケットに直接ではなく、一意のポリシーと設定を適用できます。AWS SDK for PHP では、バケット名を明示的に指定するのではなく、バケットフィールドでアクセスポイントの ARN を API オペレーションに使用できます。S3 アクセスポイントと ARN の仕組みの詳細については、[こちら](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html)を参照してください 以下の例では、次の方法を示しています。
+ [GetObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getobject) をアクセスポイントの ARN とともに使用して、バケットからオブジェクトを取得します。
+ バケットにオブジェクトを追加するには、アクセスポイントの ARN とともに [PutObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject) を使用します。
+ クライアントリージョンの代わりに ARN リージョンを使用するように S3 クライアントを設定します。

AWS SDK for PHP 用のすべてのサンプルコードは [GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code) で入手できます。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、AWS の認証情報を設定します ([AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md) を参照)。AWS SDK for PHP からのインポート ([AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md) を参照)。

 **インポート**。

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

use Aws\S3\S3Client;
```

## Get Object
<a name="get-object"></a>

まず AWS リージョンとバージョンを指定する AWS.S3 クライアントサービスを作成します。次に、キーと `getObject` フィールドの S3 アクセスポイントの ARN を指定して `Bucket` メソッドを呼び出します。これにより、そのアクセスポイントに関連付けられたバケットからオブジェクトが取得されます。

 **サンプルコード** 

```
$s3 = new S3Client([
    'version'     => 'latest',
    'region'      => 'us-west-2',
]);
$result = $s3->getObject([
    'Bucket' => 'arn:aws:s3:us-west-2:123456789012:accesspoint:endpoint-name',
    'Key' => 'MyKey'
]);
```

## バケットにオブジェクトを配置する
<a name="put-an-object-in-a-bucket"></a>

まず AWS リージョンとバージョンを指定する AWS.S3 クライアントサービスを作成します。次に、必要なキー、本文やソースファイル、および `putObject` フィールドに S3 アクセスポイントの ARN を指定して `Bucket` メソッドを呼び出します。これにより、そのアクセスポイントに関連付けられたバケットにオブジェクトが格納されます。

 **サンプルコード** 

```
$s3 = new S3Client([
    'version'     => 'latest',
    'region'      => 'us-west-2',
]);
$result = $s3->putObject([
    'Bucket' => 'arn:aws:s3:us-west-2:123456789012:accesspoint:endpoint-name',
    'Key' => 'MyKey',
    'Body' => 'MyBody'
]);
```

## クライアントリージョンの代わりに ARN リージョンを使用するように S3 クライアントを設定する
<a name="configure-the-s3-client-to-use-the-arn-region-instead-of-the-client-region"></a>

S3 クライアントオペレーションで S3 アクセスポイント の ARN を使用する場合、デフォルトでは、クライアントは ARN リージョンがクライアントリージョンと一致していることを確認し、一致していない場合は例外をスローします。この動作は、`use_arn_region` 設定オプションを `true` に設定することで、クライアントリージョン上で ARN リージョンを受け入れるように変更できます。デフォルトでは、オプションは `false` に設定されています。

 **サンプルコード** 

```
$s3 = new S3Client([
    'version'        => 'latest',
    'region'         => 'us-west-2',
    'use_arn_region' => true
]);
```

クライアントは、環境変数と Config ファイルオプションも次の優先順位でチェックします。

1. 上記の例のような、`use_arn_region` クライアントオプション。

1. 環境変数 `AWS_S3_USE_ARN_REGION` 

```
export AWS_S3_USE_ARN_REGION=true
```

1. `s3_use_arn_region` 共有設定ファイルの config 変数 AWS (デフォルトでは `~/.aws/config` にあります)。

```
[default]
s3_use_arn_region = true
```

# AWS SDK for PHP バージョン 3 で Amazon S3 マルチリージョンアクセスポイントを使用する
<a name="s3-multi-region-access-points"></a>

[Amazon Simple Storage Service (S3) マルチリージョンアクセスポイント](https://docs.aws.amazon.com//AmazonS3/latest/userguide/MultiRegionAccessPoints.html)は、 AWS リージョン間で Amazon S3 リクエストトラフィックをルーティングするためのグローバルエンドポイントを提供します。

マルチリージョンアクセスポイントは[、 SDK for PHP、別の SDK、S3 コンソール、または CLI を使用して](https://docs.aws.amazon.com//aws-sdk-php/v3/api/api-s3control-2018-08-20.html#createmultiregionaccesspoint)作成できます。 AWS [S3 AWS](https://docs.aws.amazon.com//AmazonS3/latest/userguide/multi-region-access-point-create-examples.html)

**重要**  
SDK for PHP でマルチリージョンアクセスポイントを使用するには、PHP 環境に [AWS Common Runtime (AWS CRT) 拡張機能](guide_crt.md)がインストールされている必要があります。

マルチリージョンアクセスポイントを作成すると、Amazon S3 は次の形式の Amazon リソースネーム (ARN) を生成します。

`arn:aws:s3::account-id:accesspoint/MultiRegionAccessPoint_alias`

`[getObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getobject)` および `[putObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject)` メソッドのバケット名の代わりに、生成された ARN を使用できます。

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

use Aws\S3\S3Client;

// Assign the Multi-Region Access Point to a variable and use it place of a bucket name.
$mrap = 'arn:aws:s3::123456789012:accesspoint/mfzwi23gnjvgw.mrap';
$key = 'my-key';

$s3Client = new S3Client([
    'region' => 'us-east-1'
]);

$s3Client->putObject([
    'Bucket' => $mrap,
    'Key' => $key,
    'Body' => 'Hello World!'
]);

$result = $s3Client->getObject([
    'Bucket' => $mrap,
    'Key' => $key
]);

echo $result['Body'] . "\n";

// Clean up.
$result = $s3Client->deleteObject([
    'Bucket' => $mrap,
    'Key' => $key
]);

$s3Client->waitUntil('ObjectNotExists', ['Bucket' => $mrap, 'Key' => $key]);

echo "Object deleted\n";
```