Работа с 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();
}
Также в библиотеке
Работа с CSV в PHP: библиотека SplFileObject и встроенные функции
Криптография в TypeScript: Обзор библиотеки crypto-js
Авторизация и аутентификация в PHP: полное руководство с примерами
Rate Limiting в C# (.NET): руководство по библиотеке System.Threading.RateLimiting
HTTP-клиент для Rust: топ библиотек для работы с запросами
Рекомендаций
Также в библиотеке
Работа с CSV в PHP: библиотека SplFileObject и встроенные функции
Криптография в TypeScript: Обзор библиотеки crypto-js
Авторизация и аутентификация в PHP: полное руководство с примерами
Rate Limiting в C# (.NET): руководство по библиотеке System.Threading.RateLimiting