Laravel 5 – Clear Cache in Shared Hosting Server
Solution 1
You can call an Artisan command outside the CLI.
Route::get('/clear-cache', function() {
$exitCode = Artisan::call('cache:clear');
// return what you want
});
You can check the official doc here http://laravel.com/docs/5.0/artisan#calling-commands-outside-of-cli
Update
There is no way to delete the view cache. Neither php artisan cache:clear
does that.
If you really want to clear the view cache, I think you have to write your own artisan
command and call it as I said before, or entirely skip the artisan
path and clear the view cache in some class that you call from a controller or a route.
But, my real question is do you really need to clear the view cache? In a project I'm working on now, I have almost 100 cached views and they weight less then 1 Mb, while my vendor
directory is > 40 Mb. I don't think view cache is a real bottleneck in disk usage and never had a real need to clear it.
As for the application cache, it is stored in the storage/framework/cache
directory, but only if you configured the file
driver in config/cache.php
. You can choose many different drivers, such as Redis or Memcached, to improve performances over a file-based cache.
Solution 2
Go to laravelFolder/bootstrap/cache
then rename config.php
to anything you want eg. config.php_old
and reload your site. That should work like voodoo.
Solution 3
As I can see: http://itsolutionstuff.com/post/laravel-5-clear-cache-from-route-view-config-and-all-cache-data-from-applicationexample.html
is it possible to use the code below with the new clear cache commands:
//Clear Cache facade value:
Route::get('/clear-cache', function() {
$exitCode = Artisan::call('cache:clear');
return '<h1>Cache facade value cleared</h1>';
});
//Reoptimized class loader:
Route::get('/optimize', function() {
$exitCode = Artisan::call('optimize');
return '<h1>Reoptimized class loader</h1>';
});
//Route cache:
Route::get('/route-cache', function() {
$exitCode = Artisan::call('route:cache');
return '<h1>Routes cached</h1>';
});
//Clear Route cache:
Route::get('/route-clear', function() {
$exitCode = Artisan::call('route:clear');
return '<h1>Route cache cleared</h1>';
});
//Clear View cache:
Route::get('/view-clear', function() {
$exitCode = Artisan::call('view:clear');
return '<h1>View cache cleared</h1>';
});
//Clear Config cache:
Route::get('/config-cache', function() {
$exitCode = Artisan::call('config:cache');
return '<h1>Clear Config cleared</h1>';
});
It's not necessary to give the possibility to clear the caches to everyone, especially in a production enviroment, so I suggest to comment that routes and, when it's needed, to de-comment the code and run the routes.
Solution 4
Config caching
The laravel config spreads across dozens of files, and including
every one of them for each request is a costly process. To combine all of your config files into one, use:
php artisan config:cache
Keep in mind that any changes to the config will not have any effect once you cache it. To refresh the config cache, run the above command again. In case you want to completely get rid of the config cache, run
php artisan config:clear
Routes caching Routing is also an expensive task in laravel. To cache the routes.php file run the below command:
php artisan route:cache
Mind that it doesn't work with closures. In case you're using closures this is a great chance to move them into a controller, as the artisan command will throw an exception when trying to compile routes that are bound to closures instead of proper controller methods. In the same as the config cache, any changes to routes.php will not have any effect anymore. To refresh the cache, run the above command everytime you do a change to the routes file. To completely get rid of the route cache, run the below command:
php artisan route:clear
Classmap optimization
It's not uncommon for a medium-sized project to be spread across hundreds of PHP files. As good coding behaviours dictate us, everything has its own file. This, of course, does not come without drawbacks. Laravel has to include dozens of different files for each request, which is a costly thing to do.
Hence, a good optimization method is declaring which files are used for every request (this is, for example, all your service providers, middlewares and a few more) and combining them in only one file, which will be afterwards loaded for each request. This not different from combining all your javascript files into one, so the browser will have to make fewer requests to the server.
The additional compiles files (again: service providers, middlewares and so on) should be declared by you in config/compile.php, in the files key. Once you put there everything essential for every request made to your app, concatenate them in one file with:
php artisan optimize --force
Optimizing the composer autoload
This one is not only for laravel, but for any application that's making use of composer.
I'll explain first how the PSR-4 autoload works, and then I'll show you what command you should run to optimize it. If you're not interested in knowing how composer works, I recommend you jumping directly to the console command.
When you ask composer for the App\Controllers\AuthController
class, it first searches for a direct association in the classmap. The classmap is an array with 1-to-1 associations of classes and files. Since, of course, you did not manually add the Login class and its associated file to the classmap, composer will move on and search in the namespaces.
Because App is a PSR-4 namespace, which comes by default with Laravel and it's associated to the app/
folder, composer will try converting the PSR-4 class name to a filename with basic string manipulation procedures. In the end, it guesses that App\Controllers\AuthController
must be located in an AuthController.php file, which is in a Controllers/
folder that should luckily be in the namespace folder, which is app/
.
All this hard work only to get that the App\Controllers\AuthController
class exists in the app/Controllers/AuthController.php
file. In order to have composer scanning your entire application and create direct 1-to-1 associations of classes and files, run the following command:
composer dumpautoload -o
Keep in mind that if you already ran php artisan optimize --force, you don't have to run this one anymore. Since the optimize command already tells composer to create an optimized autoload.
Solution 5
This package is for php ^7.0 and ^laravel5.5.
Use this package in cronjob that I have created for this purpose only. I was also facing same situation. https://packagist.org/packages/afrazahmad/clear-cached-data Install it and run:
php artisan clear:data
and it will run the following commands automcatically
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan clear-compiled
php artisan config:cache
Hope it helps.
If you want to run it automatically at specific time then you will have to setup cronjob first. e.g.
in app/console/kernel.php
In schedule function:
$schedule->command('clear:data')->dailyAt('07:00');
Related videos on Youtube
Comments
-
Rinto George over 2 years
The question is pretty clear.
php artisan cache:clear
Is there any workaround to clear the cache like the above command but without using CLI. I am using a popular shared hosting service, but as per my plan, I don't have control panel access.
I want to clear the views cache.
I saw a question almost the same like this, but it doesn't help me.
-
ceejayoz almost 9 yearsRunning Laravel on shared hosting is insane, IMO, for precisely this sort of reason. How are you running migrations?
-
Rinto George almost 9 years@ceejayoz .. Actually I just started this project, and its my first laravel project as well. I didn't come to this migration thing yet..
-
elb98rm almost 8 years"Running Laravel on shared hosting is insane" @ceejayoz ... But this is the real world. Sometimes you have to because there's no choice.
-
Azade over 2 yearsand this worked in laravel 8
-
-
Marco Pallante almost 9 yearsWhat cache are you trying to clear? The
cache:clear
command works with the application cache, the one that is accessed from theCache
facade. -
Rinto George almost 9 yearsI want to clear the view cache, there are a lot of pages saved in view cache folder. One more question, when says application cache, which are all the directories it targets.
-
Rinto George almost 9 yearsThanks for the explanation!. I am not worried bout disks space :) But one question if view cache is not clearing, then how the new changes in view get affect in the website, is that any I/O check happening in laravel ?
-
Marco Pallante almost 9 yearsI think it does a timestamp checking on files, which is faster than rebuilding the blade template
-
Rinto George almost 9 yearsYea, I guess so, anyway you helped me to think in the right way, thanks!
-
simon about 7 yearsI confirm. Works in laravel 5.4. Me bows.
-
Luis Contreras about 7 yearsThe one and only solution! If you wonder why works ? only god knows
-
Rikudo Pain almost 7 yearsConfirmed it wipe the pain in the a** while hosting laravel 5.4 from windows to shared hosting.... THANK YOU!!!
-
Jason Wheeler almost 7 yearsIt seems that in a few scenarios, this is the only solution that works. If you have a cached config, and then you remove a Facade or Service Provider, when you run the command to create the new cached config, it runs using the existing cached config, and tries to reference the Facade and/or Service Provider classes that no longer exist and fails. The other option would be to remove the references from the config file, regenerate your cached config, then remove the actual Facade and/or Service Provider classes.
-
Phiter over 6 yearsYou need to clear view cache if you make a custom directive, which was my case.
-
Haseeb Zulfiqar over 6 yearsI found this snippet most helpful.
-
Ja22 over 6 yearsThanks for this perfect answer. This should be the accepted answer
-
Amanullah Aman over 6 yearsBoss, you save my day. Thanks a lot.
-
Spidi over 5 yearsThe alternative to the command
php artisan cache:clear
is asked. This wont clear viewed cache stored in the storage folder, which is exactly what is needed. -
jfadich over 5 years"There is no way to delete the view cache" This is simply not true. You can use
php artisan view:clear
to do just that. -
Raja Khoury over 4 years
config:cache
will clear and cache config - so i guess there's no need to add both -
Amos Chihi over 4 yearssure. you just use the line you require.
-
Chandan Sharma over 4 yearsFor Laravel 6.6, To remove caching, I just removed
cache
folder & in.env
file default cache value. But after deleting all this getting problem again.. whenphp artisan optimize
. Finally this one solved my problem, not by renaming but changing the key value in config.php file. Thanks @DeadGuy -
nayeemdev over 4 yearsI have problem with config:cache its doesn't work in route or controller but others are worked. what would be problem?
-
Daniel W. over 2 yearsThis answer doesn't add any information that didn't get posted yet
-
msayubi76 over 2 years@DanielW. information about what?
-
Daniel W. over 2 yearsThe artisan command has been posted in a different answer and also renaming or deleting the config.php. What does your answer add thats new?
-
msayubi76 over 2 yearsyeah you are right but this ans elobrate that what you can do in a maximum way on local server, shared server with limited access and dedicated server with fully access to solve your problem