Освоение загрузки файлов S3 в PHP: подробное руководство с примерами кода

Вы разработчик PHP и хотите интегрировать загрузку файлов с Amazon S3? Не смотрите дальше! В этой статье блога мы рассмотрим различные методы загрузки файлов на S3 с помощью PHP, сопровождаемые разговорными объяснениями и практическими примерами кода. Давайте сразу же приступим!

Метод 1. Использование AWS SDK для PHP
AWS SDK для PHP предоставляет удобный и комплексный способ взаимодействия с Amazon S3. Чтобы загрузить файл, вы можете использовать метод putObject, предоставляемый SDK. Вот пример:

<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
// Create an S3 client
$s3 = new S3Client([
    'version' => 'latest',
    'region' => 'your-s3-region',
    'credentials' => [
        'key' => 'your-aws-access-key',
        'secret' => 'your-aws-secret-access-key',
    ],
]);
// Upload a file to S3
$result = $s3->putObject([
    'Bucket' => 'your-bucket-name',
    'Key' => 'path/to/your/file.jpg',
    'SourceFile' => 'local/path/to/your/file.jpg',
]);
// Check the upload result
if ($result['@metadata']['statusCode'] === 200) {
    echo 'File uploaded successfully!';
} else {
    echo 'File upload failed.';
}
?>

Метод 2: использование cURL
Если вы предпочитаете более простой подход, вы можете использовать cURL для загрузки файлов на S3. Вот пример:

<?php
// Set your S3 credentials
$accessKey = 'your-aws-access-key';
$secretKey = 'your-aws-secret-access-key';
$bucket = 'your-bucket-name';
$key = 'path/to/your/file.jpg';
$file = 'local/path/to/your/file.jpg';
// Generate a signed URL
$expires = time() + 3600; // URL expiration time
$signature = urlencode(base64_encode(hash_hmac('sha1', "PUT\n\n\n{$expires}\n/{$bucket}/{$key}", $secretKey, true)));
$url = "https://{$bucket}.s3.amazonaws.com/{$key}?AWSAccessKeyId={$accessKey}&Expires={$expires}&Signature={$signature}";
// Upload the file using cURL
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_INFILE, fopen($file, 'r'));
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($file));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
// Check the upload result
if ($response === false) {
    echo 'File upload failed.';
} else {
    echo 'File uploaded successfully!';
}
?>

Метод 3. Использование AWS SDK для PHP с предварительно подписанными URL-адресами
Предварительно подписанные URL-адреса обеспечивают безопасный способ загрузки файлов непосредственно на S3 без необходимости использования логики на стороне сервера. Вот пример использования AWS SDK для PHP:

<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
// Create an S3 client
$s3 = new S3Client([
    'version' => 'latest',
    'region' => 'your-s3-region',
    'credentials' => [
        'key' => 'your-aws-access-key',
        'secret' => 'your-aws-secret-access-key',
    ],
]);
// Generate a presigned URL
$cmd = $s3->getCommand('putObject', [
    'Bucket' => 'your-bucket-name',
    'Key' => 'path/to/your/file.jpg',
]);
$request = $s3->createPresignedRequest($cmd, '+15 minutes');
$presignedUrl = (string) $request->getUri();
// Output the presigned URL
echo 'Upload your file using the following URL:';
echo '<br>';
echo '<a href="' . $presignedUrl . '">' . $presignedUrl . '</a>';
?>

Имея в своем распоряжении эти методы, у вас есть множество вариантов загрузки файлов на Amazon S3 с помощью PHP. Выберите тот, который лучше всего соответствует вашим требованиям, и начните использовать возможности масштабируемого объектного хранилища для своих приложений!