Быстрый старт
Один сценарий от начала до конца: скрипт подключается к S5W, заводит папку для отчётов, загружает в неё два файла, находит их в списке, переименовывает один и убирает за собой. На каждом шаге видно, что вернул сервер.
Перед началом
Установите пакет и положите адрес и ключ в переменные окружения — как это сделать и где взять ключ, описано на странице Установка.
composer require flytachi/winter-sdk-s5w
export S5W_URL=https://s5.example.com
export S5W_KEY=s5w_9f3c…Весь код ниже — это один файл quickstart.php, который растёт с каждым шагом. Полная
версия — в конце страницы.
Шаг 1. Подключиться и проверить ключ
<?php
require __DIR__ . '/vendor/autoload.php';
use Flytachi\Winter\SDK\S5w\S5w;
$s5w = S5w::connect(getenv('S5W_URL'), getenv('S5W_KEY'));
$key = $s5w->check();
printf(
"Бакет %s, доступ %s, свободно %.1f МБ\n",
$key->bucket->name,
$key->access->name,
$key->storage->free / 1024 / 1024,
);$ php quickstart.php
Бакет media, доступ FULL, свободно 445.9 МБcheck() — единственный вызов, который годится для любого ключа. Он отвечает на вопрос
«ключ рабочий и что за ним стоит». Если ключ не подходит, вместо результата будет
исключение — их разбор есть на странице Установка.
Шаг 2. Завести папку
Папки в S5W необязательны, но удобны: у папки есть видимость, срок хранения и политика кэша, и они действуют на все файлы внутри. Заведём папку для отчётов:
$folder = $s5w->folders()->ensure('reports');
echo "Папка {$folder->name}, публичная: " . ($folder->public ? 'да' : 'нет') . "\n";Папка reports, публичная: нетensure() создаёт папку, если её нет, и возвращает существующую как есть, если она уже
создана. Поэтому скрипт можно запускать сколько угодно раз.
Шаг 3. Загрузить файлы
Загрузим два файла: один — сгенерированный прямо в памяти, второй — с диска.
$files = $s5w->files();
// из памяти: например, отчёт, который приложение только что собрало
$csv = $files->uploadContent("date,total\n2026-11-01,42\n", 'november.csv', folder: $folder);
// с диска
file_put_contents('/tmp/notes.txt', 'Квартальные заметки');
$notes = $files->upload('/tmp/notes.txt', folder: $folder);
foreach ([$csv, $notes] as $file) {
printf("%s %-14s %4d байт %s\n", $file->id, $file->name, $file->content->size, $file->content->mime);
}fS8sVdbl_oQJprfO november.csv 25 байт text/csv
_Yjn2giejB4o0KUV notes.txt 37 байт text/plainЗапомните главное поле — id. Это 16-символьный идентификатор файла: по нему файл
адресуется во всех остальных методах и в адресах раздачи. Его можно хранить у себя в базе
и показывать в URL.
Тип файла определяет сервер
SDK не передаёт MIME-тип — сервер определяет его по содержимому. Имя важно только для
текстовых форматов (.csv, .md, .yaml), которые по байтам неотличимы от обычного текста.
Шаг 4. Найти файлы в списке
$page = $files->list(folder: $folder);
echo "В папке {$page->total} файл(а):\n";
foreach ($page as $file) {
echo " {$file->name}\n";
}В папке 2 файл(а):
notes.txt
november.csvlist() возвращает одну страницу — объект Page. По нему можно пройти foreach, а
total показывает, сколько всего файлов под фильтром на всех страницах. Чтобы перебрать
все страницы подряд, есть all() — см. Работа с папками и файлами.
Шаг 5. Переименовать
$notes = $files->rename($notes, 'Q4-notes.txt');
echo "Теперь {$notes->name}, id прежний: {$notes->id}\n";Теперь Q4-notes.txt, id прежний: _Yjn2giejB4o0KUVId при переименовании не меняется, поэтому все уже выданные адреса продолжают работать.
Шаг 6. Убрать за собой
$files->delete($csv);
$files->delete($notes);
$s5w->folders()->delete('reports');
echo "Готово, бакет чистый\n";Готово, бакет чистыйУдаление папки удаляет файлы
folders()->delete() удаляет папку вместе со всеми файлами в ней, без подтверждения.
Здесь мы удалили файлы заранее только для наглядности — удаления папки хватило бы и одного.
Весь код целиком
<?php
require __DIR__ . '/vendor/autoload.php';
use Flytachi\Winter\SDK\S5w\S5w;
$s5w = S5w::connect(getenv('S5W_URL'), getenv('S5W_KEY'));
// 1. ключ
$key = $s5w->check();
printf(
"Бакет %s, доступ %s, свободно %.1f МБ\n",
$key->bucket->name,
$key->access->name,
$key->storage->free / 1024 / 1024,
);
// 2. папка
$folder = $s5w->folders()->ensure('reports');
echo "Папка {$folder->name}, публичная: " . ($folder->public ? 'да' : 'нет') . "\n";
// 3. загрузка
$files = $s5w->files();
$csv = $files->uploadContent("date,total\n2026-11-01,42\n", 'november.csv', folder: $folder);
file_put_contents('/tmp/notes.txt', 'Квартальные заметки');
$notes = $files->upload('/tmp/notes.txt', folder: $folder);
foreach ([$csv, $notes] as $file) {
printf("%s %-14s %4d байт %s\n", $file->id, $file->name, $file->content->size, $file->content->mime);
}
// 4. список
$page = $files->list(folder: $folder);
echo "В папке {$page->total} файл(а):\n";
foreach ($page as $file) {
echo " {$file->name}\n";
}
// 5. переименование
$notes = $files->rename($notes, 'Q4-notes.txt');
echo "Теперь {$notes->name}, id прежний: {$notes->id}\n";
// 6. уборка
$files->delete($csv);
$files->delete($notes);
$s5w->folders()->delete('reports');
echo "Готово, бакет чистый\n";Дальше
- Модель работы — как устроен SDK и почему так
- Загрузка файлов — картинки, временные файлы, имена
- Большие файлы — прогресс и продолжение после обрыва
- Справочник API — все методы и аргументы