Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Laravel: storage, disk, flysystem

Было ли взаимодействие с файлами (например, через Storage)? Как это происходило?

Вопрос проверяет, умеете ли вы работать с файловой системой Laravel через диски, пути, загрузку/выдачу файлов и понимаете ли, как это связано с конфигом и драйверами.

Короткий ответ

В Laravel работа с файлами обычно делается через фасад Storage, который использует настроенные “диски” (local, public, s3 и т.д.). Вы выбираете диск, затем записываете/читаете файлы методами вроде put, get, exists, delete, url. Для загрузок из формы часто берут файл из Request и сохраняют через store/storeAs на нужный диск. Это удобно, потому что можно сменить хранилище (например, local → S3) почти без изменений кода.

Длинный ответ

Laravel предоставляет единый слой для работы с файловыми хранилищами: локальная ФС, публичные файлы, S3-совместимые хранилища и др.

Определение

Определение: Storage — это API (через Flysystem), которое даёт единый интерфейс к разным хранилищам через понятие disk (диск/драйвер).

Как обычно организована работа

  1. Настраивают диски в config/filesystems.php (например, local, public, s3).

  2. В коде выбирают диск: Storage::disk('public').

  3. Выполняют операции:

    • запись: put, putFile, putFileAs

    • чтение: get, download

    • проверка/удаление: exists, delete

    • ссылки: url (для публичных дисков/объектного хранилища)

Пример: сохранить строку в файл

use Illuminate\Support\Facades\Storage;

Storage::disk('local')->put('logs/custom.txt', "Hello\n");

Пример: загрузка файла из формы

public function upload(\Illuminate\Http\Request $request)
{
    $path = $request->file('avatar')->store('avatars', 'public'); // public disk
    return ['path' => $path, 'url' => \Storage::disk('public')->url($path)];
}

Публичные файлы и storage:link

  • Для диска public обычно файлы лежат в storage/app/public.

  • Чтобы они отдавались веб-сервером, создают симлинк:

    • php artisan storage:link

  • После этого файлы доступны из public/storage/....

Практические моменты, которые часто обсуждают на собеседовании

  • Имена файлов: лучше генерировать уникальные (например, UUID), а не доверять исходному имени.

  • Безопасность: приватные файлы не кладут в публичный диск; для выдачи используют контроллер + download() или временные ссылки (в зависимости от драйвера).

  • Абстракция диска: код не должен “знать”, где физически хранится файл (local/S3) — это решается конфигом.

Краткий вывод

Storage стоит использовать почти всегда вместо прямых file_put_contents() и ручных путей: это даёт переносимость между хранилищами, единый API и более безопасную/управляемую работу с файлами.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • Laravel

    Laravel

Ключевые слова

#storage

#disk

#flysystem

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.