---
title: "aws/aws-sdk-php: настройка и работа с S3-совместимым хранилищем в PHP"
description: "Подробное руководство по работе с aws/aws-sdk-php: установка, настройка доступа, подключение к S3-совместимому Object Storage, примеры использования. Документация Timeweb Cloud."
---

# PHP

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

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

## Установка

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

```
composer require aws/aws-sdk-php
```

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

```php
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](https://timeweb.cloud/docs/s3-storage/tools/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 без дополнительной настройки:

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

### Через код

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

```php
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` настроено несколько профилей, можно указать нужный:

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

## Пример

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

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

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

Код скрипта:

```php
<?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](https://github.com/timeweb-cloud/s3-examples/tree/master/php).
