Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

PHP

aws/aws-sdk-php — это официальный SDK от Amazon для работы с S3 на языке PHP. Он позволяет выполнять базовые операции с объектами в S3: загрузку, скачивание, удаление, вывод списка объектов, а также формирование подписанных ссылок.

Установка

Установите библиотеку с помощью Composer:

    
composer require aws/aws-sdk-php

После установки библиотека будет расположена в директории vendor. Для ее использования подключите библиотеку:

    
require 'vendor/autoload.php';

Для корректной работы SDK требуется установленный PHP-модуль ext-xml.

Проверьте наличие модуля командой:

    
php -m | grep xml

Если модуль не установлен, установите его:

  • Debian/Ubuntu: sudo apt install php-xml
  • Alpine: apk add php8-xml
  • RHEL/CentOS: sudo yum install php-xml

Настройка доступа

Реквизиты доступа можно задать несколькими способами.

Через файлы ~/.aws/config и ~/.aws/credentials

При использовании AWS CLI в домашней директории пользователя автоматически создается папка .aws с файлами, содержащими данные для подключения к S3. При необходимости эту папку и файлы можно создать вручную — без использования AWS CLI. Файл ~/.aws/credentials должен содержать такие данные:

    
[default]
aws_access_key_id = <ACCESS_KEY>
aws_secret_access_key = <SECRET_KEY>

И ~/.aws/config:

    
[default]
output = json
endpoint_url = https://s3.twcstorage.ru
region = ru-1

Через переменные окружения

Можно задать переменные:

    
export AWS_ACCESS_KEY_ID=<ACCESS_KEY>
export AWS_SECRET_ACCESS_KEY=<SECRET_KEY>

И использовать SDK без дополнительной настройки:

    
$s3 = new Aws\S3\S3Client([    'region' => 'ru-1',    'version' => 'latest',    'endpoint' => 'https://s3.twcstorage.ru', ]);

Через код

Можно явно задать реквизиты при создании клиента:

    
use Aws\S3\S3Client; ​ $s3 = new S3Client([    'region' => 'ru-1',    'version' => 'latest',    'endpoint' => 'https://s3.twcstorage.ru',    'credentials' => [        'key' => '<ACCESS_KEY>',        'secret' => '<SECRET_KEY>',   ], ]);

Использование другого профиля AWS CLI

Если в ~/.aws/credentials настроено несколько профилей, можно указать нужный:

    
$s3 = new S3Client([    'profile' => 'myprofile',    'region' => 'ru-1',    'version' => 'latest',    'endpoint' => 'https://s3.twcstorage.ru', ]);

Пример

Пример ниже демонстрирует базовые операции с объектами:

  • загрузка файла в бакет;
  • вывод списка объектов;
  • скачивание файла;
  • удаление объекта.

Предварительно создайте файл с именем example.txt в той же директории, где находится скрипт.

Код скрипта:

    
<?php require 'vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException; $bucket = 'имя_бакета'; $key = 'example.txt'; $localUpload = 'example.txt'; $localDownload = 'downloaded_example.txt'; $s3 = new S3Client([ 'region' => 'ru-1', 'version' => 'latest', 'endpoint' => 'https://s3.twcstorage.ru', 'credentials' => [ 'key' => '<ACCESS_KEY>', 'secret' => '<SECRET_KEY>', ], ]); try { // 1. Загрузка файла в бакет if (file_exists($localUpload)) { echo "Загрузка файла $localUpload...\n"; $s3->putObject([ 'Bucket' => $bucket, 'Key' => $key, 'SourceFile' => $localUpload, ]); echo "Загрузка завершена.\n"; } else { echo "Файл $localUpload не найден. Пропуск загрузки.\n"; } // 2. Получение списка объектов echo "\nСодержимое бакета:\n"; $result = $s3->listObjectsV2([ 'Bucket' => $bucket, ]); if (!empty($result['Contents'])) { foreach ($result['Contents'] as $object) { echo "- {$object['Key']}\n"; } } else { echo "(Бакет пустой)\n"; } // 3. Скачивание файла echo "\nСкачивание $key в $localDownload...\n"; $s3->getObject([ 'Bucket' => $bucket, 'Key' => $key, 'SaveAs' => $localDownload, ]); echo "Скачивание завершено.\n"; // 4. Удаление файла echo "\nУдаление $key из бакета...\n"; $s3->deleteObject([ 'Bucket' => $bucket, 'Key' => $key, ]); echo "Удаление завершено.\n"; } catch (AwsException $e) { echo "Ошибка: {$e->getMessage()}\n"; }

Дополнительные примеры использования SDK вы можете найти в нашем репозитории GitHub.

Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев