

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Contoh Amazon S3 menggunakan Versi 3 AWS SDK untuk PHP
<a name="s3-examples"></a>

Amazon Simple Storage Service (Amazon S3) adalah layanan web yang menyediakan penyimpanan cloud yang sangat skalabel. Amazon S3 menyediakan penyimpanan objek yang mudah digunakan, dengan antarmuka layanan web sederhana untuk menyimpan dan mengambil sejumlah data dari mana saja di web.

Semua kode contoh untuk AWS SDK untuk PHP tersedia [di sini GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Kredensial
<a name="examplecredentials"></a>

Sebelum menjalankan kode contoh, konfigurasikan AWS kredenal Anda, seperti yang dijelaskan dalam. [Mengautentikasi dengan AWS menggunakan AWS SDK untuk PHP Versi 3](credentials.md) Kemudian impor AWS SDK untuk PHP, seperti yang dijelaskan dalam[Menginstal AWS SDK untuk PHP Versi 3](getting-started_installation.md).

**Topics**
+ [Kredensial](#examplecredentials)
+ [Membuat dan menggunakan bucket Amazon S3](s3-examples-creating-buckets.md)
+ [Mengelola izin akses bucket Amazon S3](s3-examples-access-permissions.md)
+ [Mengkonfigurasi bucket Amazon S3](s3-examples-configuring-a-bucket.md)
+ [Unggahan multipart Amazon S3](s3-multipart-upload.md)
+ [URL Amazon S3 yang telah ditandatangani sebelumnya](s3-presigned-url.md)
+ [Membuat S3 pra-ditandatangani POSTs](s3-presigned-post.md)
+ [Menggunakan bucket Amazon S3 sebagai host web statis](s3-examples-static-web-host.md)
+ [Bekerja dengan kebijakan bucket Amazon S3](s3-examples-bucket-policies.md)
+ [Menggunakan titik akses S3 ARNs](s3-examples-access-point-arn.md)
+ [Gunakan Titik Akses Multi-Wilayah](s3-multi-region-access-points.md)

# Membuat dan menggunakan bucket Amazon S3 dengan Versi 3 AWS SDK untuk PHP
<a name="s3-examples-creating-buckets"></a>

Contoh berikut menunjukkan cara:
+ Kembalikan daftar bucket yang dimiliki oleh pengirim permintaan yang diautentikasi menggunakan. [ListBuckets](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#listbuckets)
+ Buat ember baru menggunakan [CreateBucket](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createbucket).
+ Tambahkan objek ke ember menggunakan [PutObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject).

Semua kode contoh untuk AWS SDK untuk PHP tersedia [di sini GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Kredensial
<a name="examplecredentials"></a>

Sebelum menjalankan kode contoh, konfigurasikan AWS kredensyal Anda, seperti yang dijelaskan dalam. [Mengautentikasi dengan AWS menggunakan AWS SDK untuk PHP Versi 3](credentials.md) Kemudian impor AWS SDK untuk PHP, seperti yang dijelaskan dalam[Menginstal AWS SDK untuk PHP Versi 3](getting-started_installation.md).

 **Impor** 

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

use Aws\S3\S3Client;
```

## Buat daftar bucket
<a name="list-buckets"></a>

Buat file PHP dengan kode berikut. Pertama buat layanan klien AWS.S3 yang menentukan Wilayah dan versi. AWS Kemudian panggil `listBuckets` metode, yang mengembalikan semua bucket Amazon S3 yang dimiliki oleh pengirim permintaan sebagai larik struktur Bucket.

 **Kode Sampel** 

```
$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";
}
```

## Membuat bucket
<a name="create-a-bucket"></a>

Buat file PHP dengan kode berikut. Pertama buat layanan klien AWS.S3 yang menentukan Wilayah dan versi. AWS Kemudian panggil `createBucket` metode dengan array sebagai parameter. Satu-satunya bidang wajib adalah kunci 'Bucket', dengan nilai string untuk nama bucket yang akan dibuat. Namun, Anda dapat menentukan AWS Wilayah dengan bidang CreateBucketConfiguration ''. Jika berhasil, metode ini mengembalikan 'Lokasi' bucket.

 **Kode Sampel** 

```
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();
```

## Masukkan benda ke dalam ember
<a name="put-an-object-in-a-bucket"></a>

Untuk menambahkan file ke bucket baru Anda, buat file PHP dengan kode berikut.

Di baris perintah Anda, jalankan file ini dan teruskan nama bucket tempat Anda ingin mengunggah file Anda sebagai string, diikuti oleh jalur file lengkap ke file yang akan diunggah.

 **Kode Sampel** 

```
$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";
}
```

# Mengelola izin akses bucket Amazon S3 dengan Versi 3 AWS SDK untuk PHP
<a name="s3-examples-access-permissions"></a>

Daftar kontrol akses (ACLs) adalah salah satu opsi kebijakan akses berbasis sumber daya yang dapat Anda gunakan untuk mengelola akses ke bucket dan objek Anda. Anda dapat menggunakan ACLs untuk memberikan read/write izin dasar ke AWS akun lain. Untuk mempelajari lebih lanjut, lihat [Mengelola Akses dengan ACLs](https://docs.aws.amazon.com/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html).

Contoh berikut menunjukkan cara:
+ Dapatkan kebijakan kontrol akses untuk bucket yang digunakan [GetBucketAcl](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketacl).
+ Setel izin pada ember menggunakan ACLs, menggunakan [PutBucketAcl](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketacl).

Semua kode contoh untuk AWS SDK untuk PHP tersedia [di sini GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Kredensial
<a name="examplecredentials"></a>

Sebelum menjalankan kode contoh, konfigurasikan AWS kredensil Anda, seperti yang dijelaskan dalam. [Mengautentikasi dengan AWS menggunakan AWS SDK untuk PHP Versi 3](credentials.md) Kemudian impor AWS SDK untuk PHP, seperti yang dijelaskan dalam[Menginstal AWS SDK untuk PHP Versi 3](getting-started_installation.md).

## Mendapatkan dan menetapkan kebijakan daftar kontrol akses
<a name="get-and-set-an-access-control-list-policy"></a>

 **Impor** 

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

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

 **Kode Sampel** 

```
// 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";
}
```

# Mengonfigurasi bucket Amazon S3 dengan Versi 3 AWS SDK untuk PHP
<a name="s3-examples-configuring-a-bucket"></a>

Cross-origin resource sharing (CORS) menentukan cara aplikasi web klien yang dimuat di dalam satu domain untuk berinteraksi dengan sumber daya di domain yang berbeda. Dengan dukungan CORS di Amazon S3, Anda dapat membuat aplikasi web sisi klien yang kaya dengan Amazon S3 dan secara selektif mengizinkan akses lintas asal ke sumber daya Amazon S3 Anda.

Untuk informasi selengkapnya tentang penggunaan konfigurasi CORS dengan bucket Amazon S3, [lihat Cross-Origin Resource Sharing](https://docs.aws.amazon.com/AmazonS3/latest/dev/cors.html) (CORS).

Contoh berikut menunjukkan cara:
+ Dapatkan konfigurasi CORS untuk menggunakan [GetBucketCors](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketcors)bucket.
+ Atur konfigurasi CORS untuk bucket menggunakan [PutBucketCors](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketcors).

Semua kode contoh untuk AWS SDK untuk PHP tersedia [di sini GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Kredensial
<a name="examplecredentials"></a>

Sebelum menjalankan kode contoh, konfigurasikan AWS kredensyal Anda, seperti yang dijelaskan dalam. [Mengautentikasi dengan AWS menggunakan AWS SDK untuk PHP Versi 3](credentials.md) Kemudian impor AWS SDK untuk PHP, seperti yang dijelaskan dalam[Menginstal AWS SDK untuk PHP Versi 3](getting-started_installation.md).

## Dapatkan konfigurasi CORS
<a name="get-the-cors-configuration"></a>

Buat file PHP dengan kode berikut. Pertama buat layanan klien AWS.S3, lalu panggil `getBucketCors` metode dan tentukan bucket yang konfigurasi CORS yang Anda inginkan.

Satu-satunya parameter yang diperlukan adalah nama bucket yang dipilih. [Jika bucket saat ini memiliki konfigurasi CORS, konfigurasi tersebut dikembalikan oleh Amazon S3 sebagai CORSRules objek.](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#shape-corsrule)

 **Impor** 

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

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

 **Kode Sampel** 

```
$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());
}
```

## Atur konfigurasi CORS
<a name="set-the-cors-configuration"></a>

Buat file PHP dengan kode berikut. Pertama buat layanan klien AWS.S3. Kemudian panggil `putBucketCors` metode dan tentukan bucket yang konfigurasi CORS untuk disetel, dan CORSConfiguration sebagai objek [CORSRules JSON](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#shape-corsrule).

 **Impor** 

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

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

 **Kode Sampel** 

```
$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());
}
```

# Menggunakan unggahan multipart Amazon S3 dengan Versi 3 AWS SDK untuk PHP
<a name="s3-multipart-upload"></a>

Dengan satu `PutObject` operasi, Anda dapat mengunggah objek hingga 5 GB. Namun, dengan menggunakan metode upload multipart (misalnya,,, `CreateMultipartUpload``UploadPart`,`AbortMultipartUpload`)`CompleteMultipartUpload`, Anda dapat mengunggah objek dari ukuran 5 MB hingga 5 TB.

Contoh berikut menunjukkan cara:
+ Unggah objek ke Amazon S3, menggunakan. [ObjectUploader](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.ObjectUploader.html)
+ Buat unggahan multibagian untuk objek Amazon S3 menggunakan. [MultipartUploader](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.MultipartUploader.html)
+ Salin objek dari satu lokasi Amazon S3 ke lokasi lain menggunakan. [ObjectCopier](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.ObjectCopier.html)

Semua kode contoh untuk AWS SDK untuk PHP tersedia [di sini GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Kredensial
<a name="examplecredentials"></a>

Sebelum menjalankan kode contoh, konfigurasikan AWS kredensil Anda, seperti yang dijelaskan dalam. [Mengautentikasi dengan AWS menggunakan AWS SDK untuk PHP Versi 3](credentials.md) Kemudian impor AWS SDK untuk PHP, seperti yang dijelaskan dalam[Menginstal AWS SDK untuk PHP Versi 3](getting-started_installation.md).

## Pengunggah objek
<a name="object-uploader"></a>

Jika Anda tidak yakin apakah `PutObject` atau `MultipartUploader` yang terbaik untuk tugas itu, gunakan`ObjectUploader`. `ObjectUploader`mengunggah file besar ke Amazon S3 menggunakan `PutObject` salah satu `MultipartUploader` atau, berdasarkan ukuran payload.

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

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

 **Kode Sampel** 

```
// 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);
```

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

Konstruktor `ObjectUploader` objek menerima argumen berikut:

**`$client`**  
`Aws\ClientInterface`Objek yang digunakan untuk melakukan transfer. Ini harus menjadi contoh dari`Aws\S3\S3Client`.

**`$bucket`**  
(`string`, *wajib*) Nama ember tempat objek diunggah.

**`$key`**  
(`string`, *wajib*) Kunci yang akan digunakan untuk objek yang sedang diunggah.

**`$body`**  
(`mixed`, *wajib*) Data objek untuk diunggah. Bisa berupa`StreamInterface`, sumber daya aliran PHP, atau string data untuk diunggah.

**`$acl`**  
(`string`) Daftar kontrol akses (ACL) untuk mengatur objek yang sedang diunggah. Objek bersifat pribadi secara default.

**`$options`**  
Array asosiatif opsi konfigurasi untuk unggahan multipart. Opsi konfigurasi berikut valid:    
**`add_content_md5`**  
(`bool`) Setel ke true untuk secara otomatis menghitung MD5 checksum untuk unggahan.  
**`mup_threshold`**  
(`int`, *default*:`int(16777216)`) Jumlah byte untuk ukuran file. Jika ukuran file melebihi batas ini, unggahan multibagian digunakan.  
**`before_complete`**  
(`callable`) Callback untuk memanggil sebelum operasi. `CompleteMultipartUpload` Callback harus memiliki tanda tangan fungsi yang mirip dengan:`function (Aws\Command $command) {...}`. Lihat [referensi CompleteMultipartUpload API](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#completemultipartupload) untuk parameter yang dapat Anda tambahkan ke `CommandInterface` objek.  
**`before_initiate`**  
(`callable`) Callback untuk memanggil sebelum operasi. `CreateMultipartUpload` Callback harus memiliki tanda tangan fungsi yang mirip dengan:`function (Aws\Command $command) {...}`. SDK memanggil callback ini jika ukuran file melebihi nilai. `mup_threshold` Lihat [referensi CreateMultipartUpload API](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createmultipartupload) untuk parameter yang dapat Anda tambahkan ke `CommandInterface` objek.  
**`before_upload`**  
(`callable`) Panggilan balik untuk memanggil sebelum operasi apa pun `PutObject` atau`UploadPart`. Callback harus memiliki tanda tangan fungsi yang mirip dengan:`function (Aws\Command $command) {...}`. SDK memanggil callback ini jika ukuran file kurang dari atau sama dengan nilai. `mup_threshold` Lihat [referensi PutObject API](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject) untuk parameter yang dapat Anda terapkan pada `PutObject` permintaan. Untuk parameter yang berlaku untuk `UploadPart` permintaan, lihat [referensi UploadPart API](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#uploadpart). SDK mengabaikan parameter apa pun yang tidak berlaku untuk operasi yang diwakili oleh objek. `CommandInterface`  
**`concurrency`**  
(`int`, *default*:`int(3)`) Jumlah maksimum `UploadPart` operasi bersamaan yang diizinkan selama pengunggahan multibagian.  
**`part_size`**  
(`int`, *default*:`int(5242880)`) Ukuran bagian, dalam byte, untuk digunakan saat melakukan pengunggahan multibagian. Nilai harus antara 5 MB dan 5 GB, inklusif.  
**`state`**  
(`Aws\Multipart\UploadState`) Objek yang mewakili status unggahan multibagian dan yang digunakan untuk melanjutkan unggahan sebelumnya. Ketika opsi ini disediakan, `$key` argumen `$bucket` and dan `part_size` opsi diabaikan.  
**`params`**  
Array asosiatif yang menyediakan opsi konfigurasi untuk setiap subperintah. Contoh:  

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

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

Unggahan multipart dirancang untuk meningkatkan pengalaman mengunggah objek yang lebih besar. Mereka memungkinkan Anda untuk mengunggah objek dalam beberapa bagian secara independen, dalam urutan apa pun, dan secara paralel.

Pelanggan Amazon S3 didorong untuk menggunakan unggahan multipart untuk objek yang lebih besar dari 100 MB.

## MultipartUploader objek
<a name="multipartuploader-object"></a>

SDK memiliki `MultipartUploader` objek khusus yang menyederhanakan proses upload multipart.

 **Impor** 

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

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

 **Kode Sampel** 

```
$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";
}
```

Pengunggah membuat generator data bagian, berdasarkan sumber dan konfigurasi yang disediakan, dan mencoba mengunggah semua bagian. Jika beberapa bagian unggahan gagal, pengunggah terus mengunggah bagian selanjutnya hingga seluruh data sumber dibaca. Setelah itu, pengunggah mencoba lagi untuk mengunggah bagian yang gagal atau melempar pengecualian yang berisi informasi tentang bagian yang gagal diunggah.

## Menyesuaikan unggahan multipart
<a name="customizing-a-multipart-upload"></a>

Anda dapat mengatur opsi kustom pada`CreateMultipartUpload`,`UploadPart`, dan `CompleteMultipartUpload` operasi yang dijalankan oleh pengunggah multibagian melalui panggilan balik yang diteruskan ke konstruktornya.

 **Impor** 

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

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

 **Kode Sampel** 

```
// 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';
    },
]);
```

### Pengumpulan sampah manual antara unggahan bagian
<a name="manual-garbage-collection-between-part-uploads"></a>

Jika Anda mencapai batas memori dengan unggahan besar, ini mungkin karena referensi siklik yang dihasilkan oleh SDK belum dikumpulkan oleh [pengumpul sampah PHP](https://www.php.net/manual/en/features.gc.php) ketika batas memori Anda tercapai. Memanggil algoritme pengumpulan secara manual di antara operasi memungkinkan siklus dikumpulkan sebelum mencapai batas itu. Contoh berikut memanggil algoritma koleksi menggunakan callback sebelum setiap bagian diunggah. Perhatikan bahwa memanggil pengumpul sampah memang datang dengan biaya kinerja, dan penggunaan optimal akan tergantung pada kasus penggunaan dan lingkungan Anda.

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

## Memulihkan dari kesalahan
<a name="recovering-from-errors"></a>

Ketika terjadi kesalahan selama proses pengunggahan multipart, a `MultipartUploadException` dilemparkan. Pengecualian ini menyediakan akses ke `UploadState` objek, yang berisi informasi tentang kemajuan unggahan multibagian. `UploadState`Dapat digunakan untuk melanjutkan unggahan yang gagal diselesaikan.

 **Impor** 

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

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

 **Kode Sampel** 

```
// 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);
}
```

Melanjutkan unggahan dari `UploadState` upaya untuk mengunggah bagian yang belum diunggah. Objek negara melacak bagian yang hilang, bahkan jika mereka tidak berurutan. Pengunggah membaca atau mencari melalui file sumber yang disediakan ke rentang byte milik bagian yang masih perlu diunggah.

 `UploadState`objek dapat diserialkan, sehingga Anda juga dapat melanjutkan unggahan dalam proses yang berbeda. Anda juga bisa mendapatkan `UploadState` objek, bahkan ketika Anda tidak menangani pengecualian, dengan menelepon`$uploader->getState()`.

**penting**  
Aliran yang diteruskan sebagai sumber ke a tidak `MultipartUploader` diputar ulang secara otomatis sebelum mengunggah. Jika Anda menggunakan aliran alih-alih jalur file dalam loop yang mirip dengan contoh sebelumnya, setel ulang `$source` variabel di dalam `catch` blok.

 **Impor** 

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

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

 **Kode Sampel** 

```
// 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);
```

### Membatalkan unggahan multibagian
<a name="aborting-a-multipart-upload"></a>

Unggahan multipart dapat dibatalkan dengan mengambil yang `UploadId` terkandung dalam `UploadState` objek dan meneruskannya ke. `abortMultipartUpload`

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

## Unggahan multipart asinkron
<a name="asynchronous-multipart-uploads"></a>

Memanggil `upload()` `MultipartUploader` adalah permintaan pemblokiran. Jika Anda bekerja dalam konteks asinkron, Anda bisa mendapatkan [janji](guide_promises.md) untuk unggahan multibagian.

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

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

 **Kode Sampel** 

```
// 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();
```

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

Konstruktor `MultipartUploader` objek menerima argumen berikut:

** `$client` **  
`Aws\ClientInterface`Objek yang digunakan untuk melakukan transfer. Ini harus menjadi contoh dari`Aws\S3\S3Client`.

** `$source` **  
Sumber data yang sedang diunggah. Ini bisa berupa jalur atau URL (misalnya,`/path/to/file.jpg`), pegangan sumber daya (misalnya,`fopen('/path/to/file.jpg', 'r)`), atau instance aliran [PSR-7](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Psr.Http.Message.StreamInterface.html).

** `$config` **  
Array asosiatif opsi konfigurasi untuk unggahan multipart.  
Opsi konfigurasi berikut valid:    
** `acl` **  
(`string`) Daftar kontrol akses (ACL) untuk mengatur objek yang sedang diunggah. Objek bersifat pribadi secara default.  
** `before_complete` **  
(`callable`) Callback untuk memanggil sebelum operasi. `CompleteMultipartUpload` Callback harus memiliki tanda tangan fungsi seperti`function (Aws\Command $command) {...}`.  
** `before_initiate` **  
(`callable`) Callback untuk memanggil sebelum operasi. `CreateMultipartUpload` Callback harus memiliki tanda tangan fungsi seperti`function (Aws\Command $command) {...}`.  
** `before_upload` **  
(`callable`) Callback untuk memanggil sebelum operasi apa pun`UploadPart`. Callback harus memiliki tanda tangan fungsi seperti`function (Aws\Command $command) {...}`.  
** `bucket` **  
(`string`, *wajib*) Nama ember tempat objek diunggah.  
** `concurrency` **  
(`int`, *default*:`int(5)`) Jumlah maksimum `UploadPart` operasi bersamaan yang diizinkan selama pengunggahan multibagian.  
** `key` **  
(`string`, *wajib*) Kunci yang akan digunakan untuk objek yang sedang diunggah.  
** `part_size` **  
(`int`, *default*:`int(5242880)`) Ukuran bagian, dalam byte, untuk digunakan saat melakukan pengunggahan multibagian. Ini harus antara 5 MB dan 5 GB, inklusif.  
** `state` **  
(`Aws\Multipart\UploadState`) Objek yang mewakili status unggahan multibagian dan yang digunakan untuk melanjutkan unggahan sebelumnya. Ketika opsi ini disediakan, `part_size` opsi `bucket``key`,, dan diabaikan.  
**`add_content_md5`**  
(`boolean`) Setel ke true untuk secara otomatis menghitung MD5 checksum untuk unggahan.  
**`params`**  
Array asosiatif yang menyediakan opsi konfigurasi untuk setiap subperintah. Contoh:  

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

## Salinan multipart
<a name="multipart-copies"></a>

Ini AWS SDK untuk PHP juga mencakup `MultipartCopy` objek yang digunakan dengan cara yang mirip dengan`MultipartUploader`, tetapi dirancang untuk menyalin objek antara 5 GB dan 5 TB dalam ukuran dalam Amazon S3.

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

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

 **Kode Sampel** 

```
// 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";
}
```

# URL pra-ditandatangani Amazon S3 dengan Versi 3 AWS SDK untuk PHP
<a name="s3-presigned-url"></a>

Anda dapat mengautentikasi jenis permintaan tertentu dengan meneruskan informasi yang diperlukan sebagai parameter string kueri alih-alih menggunakan header HTTP Otorisasi. Ini berguna untuk mengaktifkan akses browser pihak ketiga langsung ke data Amazon S3 pribadi Anda, tanpa memproksi permintaan. Idenya adalah untuk membuat permintaan “pra-ditandatangani” dan menyandikannya sebagai URL yang dapat digunakan pengguna lain. Selain itu, Anda dapat membatasi permintaan yang telah ditandatangani sebelumnya dengan menentukan waktu kedaluwarsa.

## Buat URL yang telah ditandatangani sebelumnya untuk permintaan HTTP GET
<a name="s3-presigned-url-get"></a>

Contoh kode berikut menunjukkan cara membuat URL pra-ditandatangani untuk permintaan HTTP GET dengan menggunakan SDK for PHP.

```
<?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;
```

[Referensi API untuk `createPresignedRequest`](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.S3Client.html#method_createPresignedRequest) metode ini memberikan detail lebih lanjut.

Orang lain dapat menggunakan `$presignedUrl` nilai untuk mengambil objek dalam satu jam berikutnya. Ketika permintaan HTTP GET dibuat—menggunakan browser, misalnya—muncul ke layanan S3 bahwa panggilan tersebut berasal dari pengguna yang membuat URL yang ditandatangani tekan.

## Buat URL yang telah ditandatangani sebelumnya untuk permintaan HTTP PUT
<a name="s3-presigned-url-put"></a>

Contoh kode berikut menunjukkan cara membuat URL pra-ditandatangani untuk permintaan HTTP PUT dengan menggunakan SDK for PHP.

```
<?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();
```

Orang lain sekarang dapat menggunakan URL yang telah ditandatangani sebelumnya dalam permintaan HTTP PUT untuk mengunggah file:

```
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;
    }
}
```

# Amazon S3 pra-ditandatangani POSTs dengan Versi 3 AWS SDK untuk PHP
<a name="s3-presigned-post"></a>

Sama seperti pra-ditandatangani URLs, pra-ditandatangani POSTs memungkinkan Anda untuk memberikan akses tulis ke pengguna tanpa memberi mereka AWS kredensyal. Formulir POST yang telah ditandatangani sebelumnya dapat dibuat dengan bantuan instance [PostObjectAWSS3](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.PostObjectV4.html) V4.

Contoh berikut menunjukkan cara:
+ Dapatkan data untuk formulir unggah Object POST S3 menggunakan [PostObjectV4](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.PostObjectV4.html).

Semua kode contoh untuk AWS SDK untuk PHP tersedia [di sini GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Kredensial
<a name="examplecredentials"></a>

**catatan**  
`PostObjectV4`tidak bekerja dengan kredensyal yang bersumber dari. AWS IAM Identity Center

Sebelum menjalankan kode contoh, konfigurasikan AWS kredensyal Anda, seperti yang dijelaskan dalam. [Mengautentikasi dengan AWS menggunakan AWS SDK untuk PHP Versi 3](credentials.md) Kemudian impor AWS SDK untuk PHP, seperti yang dijelaskan dalam[Menginstal AWS SDK untuk PHP Versi 3](getting-started_installation.md).

## Buat PostObject V4
<a name="create-postobjectv4"></a>

Untuk membuat instance`PostObjectV4`, Anda harus memberikan yang berikut:
+ contoh dari `Aws\S3\S3Client` 
+ bucket
+ array asosiatif dari kolom masukan formulir
+ larik kondisi kebijakan (lihat [Konstruksi Kebijakan](https://docs.aws.amazon.com/AmazonS3/latest/dev/HTTPPOSTForms.html) di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon)
+ string waktu kedaluwarsa untuk kebijakan (opsional, satu jam secara default).

 **Impor** 

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

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

 **Kode Sampel** 

```
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>
```

# Menggunakan bucket Amazon S3 sebagai host web statis dengan AWS SDK untuk PHP Versi 3
<a name="s3-examples-static-web-host"></a>

Anda dapat menyelenggarakan situs web statis di Amazon S3. Untuk mempelajari lebih lanjut, lihat [Hosting Situs Web Statis di Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html).

Contoh berikut menunjukkan cara:
+ Dapatkan konfigurasi situs web untuk menggunakan bucket [GetBucketWebsite](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketwebsite).
+ Atur konfigurasi situs web untuk menggunakan bucket [PutBucketWebsite](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketwebsite).
+ Hapus konfigurasi situs web dari ember menggunakan [DeleteBucketWebsite](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#deletebucketwebsite).

Semua kode contoh untuk AWS SDK untuk PHP Versi 3 tersedia [di sini GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Kredensial
<a name="credentials-s3-examples-static-web-host"></a>

Sebelum menjalankan kode contoh, konfigurasikan AWS kredensi Anda. Lihat [Kredensial untuk AWS SDK untuk PHP Versi 3](guide_credentials.md).

## Dapatkan, atur, dan hapus konfigurasi situs web untuk bucket
<a name="get-set-and-delete-the-website-configuration-for-a-bucket"></a>

 **Impor** 

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

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

 **Kode Sampel** 

```
$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";
}
```

# Bekerja dengan kebijakan bucket Amazon S3 dengan Versi 3 AWS SDK untuk PHP
<a name="s3-examples-bucket-policies"></a>

Anda dapat menggunakan kebijakan bucket untuk memberikan izin ke sumber daya Amazon S3 Anda. Untuk mempelajari lebih lanjut, lihat [Menggunakan Kebijakan Bucket dan Kebijakan Pengguna](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-iam-policies.html).

Contoh berikut menunjukkan cara:
+ Kembalikan kebijakan untuk bucket tertentu yang digunakan [GetBucketPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getbucketpolicy).
+ Ganti kebijakan pada ember menggunakan [PutBucketPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putbucketpolicy).
+ Menghapus kebijakan dari bucket menggunakan [DeleteBucketPolicy](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#deletebucketpolicy).

Semua kode contoh untuk AWS SDK untuk PHP tersedia [di sini GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Kredensial
<a name="examplecredentials"></a>

Sebelum menjalankan kode contoh, konfigurasikan AWS kredenal Anda, seperti yang dijelaskan dalam. [Mengautentikasi dengan AWS menggunakan AWS SDK untuk PHP Versi 3](credentials.md) Kemudian impor AWS SDK untuk PHP, seperti yang dijelaskan dalam[Menginstal AWS SDK untuk PHP Versi 3](getting-started_installation.md).

## Dapatkan, hapus, dan ganti kebijakan di bucket
<a name="get-delete-and-replace-a-policy-on-a-bucket"></a>

 **Impor** 

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

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

 **Kode Sampel** 

```
$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";
}
```

# Menggunakan titik akses S3 ARNs AWS SDK untuk PHP Versi 3
<a name="s3-examples-access-point-arn"></a>

S3 memperkenalkan titik akses, cara baru untuk berinteraksi dengan bucket S3. Access Points dapat memiliki kebijakan dan konfigurasi unik yang diterapkan padanya, bukan langsung ke bucket. AWS SDK untuk PHP Ini memungkinkan Anda menggunakan titik akses ARNs di bidang bucket untuk operasi API, bukan menentukan nama bucket secara eksplisit. Rincian lebih lanjut tentang bagaimana titik akses dan ARNs pekerjaan S3 dapat ditemukan [di sini](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-access-points.html). Contoh berikut menunjukkan cara:
+ Gunakan [GetObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getobject)dengan titik akses ARN untuk mengambil objek dari ember.
+ Gunakan [PutObject](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject)dengan titik akses ARN untuk menambahkan objek ke ember.
+ Konfigurasikan klien S3 untuk menggunakan wilayah ARN alih-alih wilayah klien.

Semua kode contoh untuk AWS SDK untuk PHP tersedia [di sini GitHub](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code).

## Kredensial
<a name="examplecredentials"></a>

Sebelum menjalankan kode contoh, konfigurasikan AWS kredensyal Anda, seperti yang dijelaskan dalam. [Mengautentikasi dengan AWS menggunakan AWS SDK untuk PHP Versi 3](credentials.md) Kemudian impor AWS SDK untuk PHP, seperti yang dijelaskan dalam[Menginstal AWS SDK untuk PHP Versi 3](getting-started_installation.md).

 **Impor** 

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

use Aws\S3\S3Client;
```

## Dapatkan objek
<a name="get-object"></a>

Pertama buat layanan klien AWS.S3 yang menentukan wilayah dan versi. AWS Kemudian panggil `getObject` metode dengan kunci Anda dan titik akses S3 ARN di `Bucket` lapangan, yang akan mengambil objek dari ember yang terkait dengan titik akses itu.

 **Kode Sampel** 

```
$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'
]);
```

## Masukkan benda ke dalam ember
<a name="put-an-object-in-a-bucket"></a>

Pertama buat layanan klien AWS.S3 yang menentukan Wilayah dan versi. AWS Kemudian panggil `putObject` metode dengan kunci yang diinginkan, file tubuh atau sumber, dan titik akses S3 ARN di `Bucket` lapangan, yang akan menempatkan objek di ember yang terkait dengan titik akses itu.

 **Kode Sampel** 

```
$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'
]);
```

## Konfigurasikan klien S3 untuk menggunakan wilayah ARN alih-alih wilayah klien
<a name="configure-the-s3-client-to-use-the-arn-region-instead-of-the-client-region"></a>

Saat menggunakan titik akses S3 ARN dalam operasi klien S3, secara default klien akan memastikan bahwa wilayah ARN cocok dengan wilayah klien, melempar pengecualian jika tidak. Perilaku ini dapat diubah untuk menerima wilayah ARN di atas wilayah klien dengan menyetel opsi `use_arn_region` konfigurasi ke. `true` Secara default, opsi diatur ke`false`.

 **Kode Sampel** 

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

Klien juga akan memeriksa variabel lingkungan dan opsi file konfigurasi, dalam urutan prioritas berikut:

1. Opsi klien`use_arn_region`, seperti pada contoh di atas.

1. Variabel lingkungan `AWS_S3_USE_ARN_REGION` 

```
export AWS_S3_USE_ARN_REGION=true
```

1. Variabel konfigurasi `s3_use_arn_region` dalam file konfigurasi AWS bersama (secara default di`~/.aws/config`).

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

# Gunakan Titik Akses Multi-Wilayah Amazon S3 dengan Versi 3 AWS SDK untuk PHP
<a name="s3-multi-region-access-points"></a>

[Amazon Simple Storage Service (S3) Titik Akses Multi-Wilayah menyediakan titik](https://docs.aws.amazon.com//AmazonS3/latest/userguide/MultiRegionAccessPoints.html) akhir global untuk merutekan lalu lintas permintaan Amazon S3 di antaranya. Wilayah AWS

Anda dapat membuat Titik Akses Multi-Region [menggunakan SDK for PHP, SDK](https://docs.aws.amazon.com//aws-sdk-php/v3/api/api-s3control-2018-08-20.html#createmultiregionaccesspoint) AWS lain, [konsol S3](https://docs.aws.amazon.com//AmazonS3/latest/userguide/multi-region-access-point-create-examples.html), atau CLI, AWS 

**penting**  
Untuk menggunakan Multi-Region Access Points dengan SDK for PHP, lingkungan PHP Anda harus memiliki AWS ekstensi [Common Runtime AWS (CRT](guide_crt.md)) diinstal.

Saat Anda membuat Titik Akses Multi-Wilayah, Amazon S3 menghasilkan Nama Sumber Daya Amazon (ARN) yang memiliki format berikut: 

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

Anda dapat menggunakan ARN yang dihasilkan sebagai pengganti nama bucket untuk `[getObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#getobject)` dan `[putObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject)` metode.

```
<?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";
```