Работа с S3 и облачными хранилищами в PHP: библиотека AWS SDK для PHP

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с S3 и облачными хранилищами в PHP: AWS SDK для PHP

Современные веб-приложения всё чаще используют облачные хранилища для хранения файлов, изображений, резервных копий и другого контента. Amazon S3 (Simple Storage Service) — один из самых популярных сервисов объектного хранения, который предоставляет масштабируемое, безопасное и высокопроизводительное хранилище. В этой статье мы рассмотрим, как работать с S3 и облачными хранилищами в PHP с помощью официального AWS SDK для PHP.

Что такое AWS SDK для PHP?

AWS SDK для PHP — это официальная библиотека от Amazon, которая позволяет взаимодействовать с сервисами AWS, включая S3, из PHP-приложений. Она предоставляет удобный объектно-ориентированный интерфейс, автоматическое управление подписями запросов, обработку ошибок и поддержку всех современных версий PHP (7.2+).

Установка AWS SDK

Установка осуществляется через Composer. Выполните команду в корне вашего проекта:

composer require aws/aws-sdk-php

После установки подключите автозагрузку Composer в вашем PHP-файле:

require 'vendor/autoload.php';

Настройка подключения к S3

Для работы с S3 вам понадобятся Access Key ID и Secret Access Key, которые можно получить в консоли AWS IAM. Также необходимо указать регион вашего бакета (например, us-east-1 или eu-central-1).

Пример базовой конфигурации клиента S3:

use Aws\S3\S3Client;

$s3Client = new S3Client([
    'version'     => 'latest',
    'region'      => 'us-east-1',
    'credentials' => [
        'key'    => 'ВАШ_ACCESS_KEY',
        'secret' => 'ВАШ_SECRET_KEY',
    ],
]);

Для продакшена рекомендуется использовать переменные окружения или файлы конфигурации AWS, чтобы не хранить ключи в коде:

putenv('AWS_ACCESS_KEY_ID=ВАШ_ACCESS_KEY');
putenv('AWS_SECRET_ACCESS_KEY=ВАШ_SECRET_KEY');
putenv('AWS_DEFAULT_REGION=us-east-1');

Основные операции с S3 в PHP

1. Создание бакета (Bucket)

Бакет — это контейнер для ваших объектов (файлов). Имя бакета должно быть глобально уникальным:

try {
    $result = $s3Client->createBucket([
        'Bucket' => 'my-unique-bucket-name',
    ]);
    echo "Бакет создан: " . $result['Location'];
} catch (Aws\Exception\AwsException $e) {
    echo "Ошибка: " . $e->getMessage();
}

2. Загрузка файла (PutObject)

Загрузка файла из локальной файловой системы в S3:

try {
    $result = $s3Client->putObject([
        'Bucket' => 'my-unique-bucket-name',
        'Key'    => 'images/photo.jpg',         // путь к объекту в бакете
        'SourceFile' => '/local/path/to/photo.jpg', // локальный файл
        'ACL'    => 'public-read',               // права доступа
    ]);
    echo "Файл загружен. URL: " . $result['ObjectURL'];
} catch (Aws\Exception\AwsException $e) {
    echo "Ошибка загрузки: " . $e->getMessage();
}

Вы также можете загружать данные напрямую из строки с помощью параметра Body:

$result = $s3Client->putObject([
    'Bucket' => 'my-unique-bucket-name',
    'Key'    => 'data.txt',
    'Body'   => 'Содержимое файла',
]);

3. Скачивание файла (GetObject)

Скачать файл из S3 можно в файл или в переменную:

// В файл
$result = $s3Client->getObject([
    'Bucket' => 'my-unique-bucket-name',
    'Key'    => 'images/photo.jpg',
    'SaveAs' => '/local/path/to/downloaded_photo.jpg',
]);

// В переменную
$result = $s3Client->getObject([
    'Bucket' => 'my-unique-bucket-name',
    'Key'    => 'data.txt',
]);
$content = $result['Body']->getContents();
echo $content;

4. Удаление файла (DeleteObject)

try {
    $result = $s3Client->deleteObject([
        'Bucket' => 'my-unique-bucket-name',
        'Key'    => 'images/photo.jpg',
    ]);
    echo "Файл удалён";
} catch (Aws\Exception\AwsException $e) {
    echo "Ошибка удаления: " . $e->getMessage();
}

Рекомендаций