

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

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