When I worked on laravel local development server php artisan storage:link
works fine for me. But when I transfer my site to production server then I saw my public
Another simple way is to run Executing php artisan storage:link
Command Programmatically
On routes/web.php
Route::get('/foo', function () {
Artisan::call('storage:link');
});
I solved this problem by another command for creating a symbolic link by terminal/cmd/shh:
ln -s /path/to/laravel/storage/app/public /path/to/public/storage
I solved this also Using laravel web route routes/web.php
Route::get('/foo', function () {
Artisan::call('storage:link');
});
In case anyone is looking for another flexible solution using php:
Route::get('/link', function () {
$target = '/home/public_html/storage/app/public';
$shortcut = '/home/public_html/public/storage';
symlink($target, $shortcut);
});
And make any required change to the $target variable and the $shortcut upon your files structure.
You can use the above code inside that web route or inside any other function.
I had an issue creating a symlink to a folder located under subdomain
, tried everything for almost 3 hours, and no luck. My case was as follow:
images.example.com
.$_SERVER['DOCUMENT_ROOT'].'/uploads/
Finally, I tried this solution and it works as expected:
ln -s /home/customer/www/images.example.com/public_html/uploads /home/customer/www/example.com/public_html/uploads
Note: I used PuTTY
to create that symlink
Creating symbolic link in a web server using SSH
In Laravel documentation, a symbolic link (symlink or soft link) from public/storage to storage/app/public should be created to make files accessible from the web.
(THIS PROCEDURE WILL CREATE SYMBOLIC LINK WITHIN THE LARAVEL PROJECT DIRECTORY)
Here are the steps on how you can create symbolic link in your Linux web server using SSH client:
1. Connect and login to your web server using SSH client (e.g. PUTTY).
2. Link storage/app/public to public/storage using the syntax.
ln -s target_path link_path
Example (in CPanel File Directory)
ln -s /home/cpanel_username/project_name/storage/app/public /home/cpanel_sername/project_name/public/storage
assuming that your laravel project "public" directory and "public_html" directory are different. Or your subdomain pointer directory may be different , then use your subdomain pointer directory like "public_html" below given process.
apply command: $ php artisan storage:link
this command will create symlink to "public" directory to your laravel project. not inside the "public_html" . so we need to move the "storage" link to "public_html" directory. for this you can move directly. if it doesn't work then move it using command . go inside the "public" directory and run the below command according to your "public_html" directory location.
$ mv storage /home/yourHostinInfo/domains/domainName/public_html
the path might be different based on your hosting information.