Я размещаю свой laravel на Cpanel, который не поддерживает символическую ссылку, поэтому, когда я запускаю storage:link, я получаю эту ошибку:
symlink() has been disabled for security reasons
когда я связался со своим провайдером, они сказали мне, что не могут его открыть, но я должен внести изменения в свою файловую систему, чтобы читать из самого хранилища.
Теперь мой вопрос: как я могу изменить config/filesystem.php, чтобы он читался не из символической ссылки, а из самой папки хранилища. заранее спасибо






У вас есть пара вариантов.
Если у вас есть доступ к командной строке, вы можете попытаться вручную создать символическую ссылку. Возможно, они отключили команду PHP symlink(), но команда ОС ln может быть вам доступна. Из командной строки:
ln -s /path-to-project/storage/app/public /path-to-project/public/storage
Если у вас нет доступа к командной строке, вы можете попробовать запустить команду из PHP, используя один из методов выполнения программы (exec(), shell_exec() и т. д.). Однако, если они отключили symlink(), они, вероятно, отключили и все это. Чтобы попытаться это сделать, создайте временный маршрут, нажмите на него один раз, а затем удалите:
Route::get('temp-create-link', function () {
exec("ln -s ".escapeshellarg(storage_path('app/public')).' '.escapeshellarg(public_path('storage')));
});
Если у вас нет возможности запустить команду ln или если она отключена на уровне ОС, вам необходимо вручную создать папку public/storage и обновить конфигурацию файловой системы, чтобы она указывала на нее. Создав папку public/storage, откройте файл config/filesystems.php и обновите ключ root для общедоступного диска, чтобы он указывал на него:
'disks' => [
// ...
'public' => [
'driver' => 'local',
// old value: 'root' => storage_path('app/public'),
'root' => public_path('storage'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
// ...
],
У меня тоже была эта проблема, когда я использовал виртуальный хостинг. На самом деле реализация storage:link не сложна, но у вас нет разрешения на использование этой команды.
Создайте папку внутри общей папки. В моем случае я создал загрузки, вы можете создать любую папку и подпапки.
В контроллере загрузите файл с помощью public_path(). Например, я загружаю изображение.
// In html form, file name is cover_image
if ($request->file('cover_image')){
$image = $request->file('cover_image');
$extension=$image->getClientOriginalExtension();
$file_name = 'File-'.date('Y-m-d-h-i-s').'.'.$extension;
$destination_path = public_path('/uploads/');
$result=$image->move($destination_path,$file_name);
if ($result){
$data['cover_image']=$file_name;
}
}
Используйте assets() для доступа к файлам. Например, я использую тег img.
<img src = "{{ asset('uploads/'.$item->cover_image) }}">
если у вас есть доступ к терминалу, я бы попробовал запустить
pwdи скопировать абсолютный путь, но нет гарантии, что это сработает, если это общий сервер.