If you're hosting a laravel project via cPanel, chances are that it could be a shared hosting server and that means you can't really use php artisan storage:link
for this.
But don't worry, there's another way to this. Just follow the steps below:
1. Create a symlink
In your public_html/public
directory, remove the storage
folder. Next, create a symlink.php
file in your public_html
directory and add the following code:
<?php
$targetFolder = $_SERVER['DOCUMENT_ROOT'].'/storage/app/public';
$linkedFolder = $_SERVER['DOCUMENT_ROOT'].'/public/storage';
symlink($targetFolder, $linkedFolder);
echo "done";
?>
2. Create a custom route to access storage
Alright, this is kind of a hack but it works extremely fine. Just add the following route in your routes/web.php
file:
<?php
Route::get('/storage/anyfolder/{filename}', function($filename){
// Your folder path
$folder_path = storage_path('app/public/anyfolder/'.$filename);
// check if the file exists
if(!File::exists($folder_path)) {
abort(404);
}
$file = File::get($folder_path);
$type = File::mimeType($folder_path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;
})
?>
Now, you can access your images or any other assets easily using:
<?php
asset('storage/anyfolder/'.$filename)
?>
Hope this helps you out!