symlink: php artisan storage:link в Laravel
Команда php artisan storage:link
в Laravel используется для создания символической ссылки (symlink) между папкой public/storage
и папкой storage/app/public
. Это необходимо для того, чтобы файлы, хранящиеся в storage/app/public
, были доступны через веб-сервер.
Зачем это нужно?
В Laravel файлы, загруженные пользователями (например, изображения, документы), обычно сохраняются в папке storage/app/public
. Однако эта папка находится вне корневой директории веб-сервера (обычно это public
), поэтому файлы из нее не могут быть доступны напрямую через браузер.
Чтобы сделать эти файлы доступными, нужно создать символическую ссылку из public/storage
в storage/app/public
. После этого файлы из storage/app/public
будут доступны по URL, например:
http://ваш-сайт/storage/имя-файла.jpg
Как это работает?
- Символическая ссылка (symlink) — это специальный файл, который ссылается на другую папку или файл. В данном случае symlink связывает
public/storage
сstorage/app/public
. - После создания symlink все файлы, которые находятся в
storage/app/public
, будут доступны черезpublic/storage
.
Как выполнить команду?
- Откройте терминал в корневой папке вашего Laravel-проекта.
- Выполните команду:
php artisan storage:link
После выполнения команды в папке public
появится символическая ссылка storage
, которая указывает на storage/app/public
.
Пример использования
- Загрузите файл (например, изображение) в
storage/app/public
:
$path = $request->file('avatar')->store('public');
Файл будет сохранен в storage/app/public/avatars/имя-файла.jpg
.
- Создайте symlink, если он еще не создан:
php artisan storage:link
- Теперь файл будет доступен по URL:
<img src="{{ asset('storage/avatars/имя-файла.jpg') }}" alt="Avatar">
Здесь asset()
генерирует полный URL до файла, например:
http://ваш-сайт/storage/avatars/имя-файла.jpg
Что делать, если symlink не работает?
- Проверьте права доступа:
Убедитесь, что веб-сервер имеет права на чтение папкиstorage/app/public
и создание symlink вpublic
. - Проверьте поддержку symlink на сервере:
Некоторые хостинги могут запрещать создание symlink из соображений безопасности. В этом случае вам нужно будет вручную скопировать файлы изstorage/app/public
вpublic/storage
. - Используйте облачное хранилище:
Если symlink недоступен, рассмотрите возможность использования облачного хранилища (например, Amazon S3) для хранения файлов.
Заключение
Команда php artisan storage:link
— это удобный способ сделать файлы из storage/app/public
доступными через веб-сервер. Она создает символическую ссылку, которая связывает public/storage
с storage/app/public
, что упрощает работу с загруженными файлами в Laravel. Если вы работаете с загрузкой файлов, обязательно используйте эту команду для обеспечения доступа к ним через браузер.