问题非常明确。
php artisan cache:clear
有没有绕过命令行,但不使用CLI来清除缓存的方法,我使用的是流行的共享托管服务,但根据我的计划,我没有控制面板访问权限。
我想清除视图缓存。
我看到一个几乎和这个问题相同的问题,但它对我没有帮助。
问题非常明确。
php artisan cache:clear
有没有绕过命令行,但不使用CLI来清除缓存的方法,我使用的是流行的共享托管服务,但根据我的计划,我没有控制面板访问权限。
我想清除视图缓存。
我看到一个几乎和这个问题相同的问题,但它对我没有帮助。
您可以在CLI之外调用Artisan命令。
Route::get('/clear-cache', function() {
$exitCode = Artisan::call('cache:clear');
// return what you want
});
你可以在这里查看官方文档。
更新
目前没有办法删除视图缓存。即使是php artisan cache:clear
也不能做到。
如果你真的想要清除视图缓存,我认为你需要编写自己的artisan
命令,并像之前说的那样调用它,或者完全跳过artisan
路径,在某个从控制器或路由中调用的类中清除视图缓存。
但是,我的真正问题是你真的需要清除视图缓存吗?在我现在正在工作的项目中,我有近100个已缓存的视图,它们的大小不到1 Mb,而我的vendor
目录超过40 Mb。我不认为视图缓存对磁盘使用是一个真正的瓶颈,并且从未真正需要清除它。
至于应用程序缓存,它存储在storage/framework/cache
目录中,但仅当您在config/cache.php
中配置了file
驱动程序时才会这样。您可以选择许多不同的驱动程序,如Redis或Memcached,以改善基于文件的缓存性能。
cache:clear
命令适用于 应用程序缓存,即从 Cache
门面访问的缓存。 - Marco Pallantephp artisan view:clear
命令来清除缓存。 - jfadich前往 laravelFolder/bootstrap/cache
,然后将 config.php
重命名为任何你想要的名称,例如 config.php_old
,重新加载你的网站。这应该像巫术一样起作用。
cache
文件夹和 .env
文件中的默认缓存值。但是在删除所有这些之后,再次出现问题...当运行 php artisan optimize
时。最终,我通过更改 config.php 文件中的键值来解决了这个问题,而不是重命名。感谢 @DeadGuy。 - Chandan Sharma使用新的清除缓存命令,下面的代码是否可行:
//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>';
});
对每个人都开放清除缓存的可能性并非必要,尤其是在生产环境中,因此我建议注释掉那些路由,需要清除缓存时再取消注释并运行这些路由代码。
配置缓存
Laravel的配置文件分布在多个文件中,为每个请求包含
所有这些文件是一个昂贵的过程。要将所有配置文件合并为一个,请使用:
php artisan config:cache
请记住,一旦缓存配置信息,对配置的任何更改将不会产生任何影响。要刷新配置缓存,请再次运行上面的命令。如果您想完全摆脱配置缓存,请运行:
php artisan config:clear
路由缓存 在 Laravel 中,路由也是一项昂贵的任务。为了缓存 routes.php 文件,请运行下面的命令:
php artisan route:cache
请注意,它不适用于闭包。如果您正在使用闭包,这是将它们移动到控制器的绝佳机会,因为artisan命令将在尝试编译绑定到闭包而不是适当的控制器方法的路由时抛出异常。 与配置缓存相同,对routes.php的任何更改都将不再产生任何影响。要刷新缓存,请每次对路由文件进行更改时运行上述命令。要完全摆脱路由缓存,请运行以下命令:
php artisan route:clear
类映射优化
一个中等规模的项目通常会分布在数百个PHP文件中。按照良好的编码习惯,每个东西都应该有自己的文件。当然,这也不是没有缺点的。每次请求,Laravel必须包含数十个不同的文件,这是一件开销很大的事情。
因此,一种很好的优化方法是声明每个请求所使用的文件(例如所有的服务提供者、中间件和其他一些文件),并将它们合并为一个文件,然后在每个请求中加载这个文件。这与将所有JavaScript文件合并成一个文件的操作相似,从而浏览器需要向服务器发出更少的请求。
额外的编译文件(例如:服务提供者、中间件等)应由您在config/compile.php中的files键中声明。一旦您将每个请求所需的所有内容放入其中,则可以使用以下命令将它们合并为一个文件:
php artisan optimize --force
优化composer的自动加载
这个问题不仅适用于laravel,也适用于任何使用composer的应用程序。
我先解释一下PSR-4 autoload是如何工作的,然后告诉你应该运行哪个命令来优化它。如果你对composer的工作原理不感兴趣,我建议你直接跳到控制台命令。
当你请求composer获取App\Controllers\AuthController
类时,它首先在classmap中搜索直接关联。classmap是一个类和文件1对1关联的数组。由于你肯定没有手动将Login类及其关联文件添加到classmap中,因此composer会继续搜索命名空间。
因为App是PSR-4命名空间,它默认与Laravel相关联,并与app/
文件夹相关联,因此composer将尝试使用基本字符串操作将PSR-4类名转换为文件名。最终,它猜测App\Controllers\AuthController
必须位于AuthController.php文件中,该文件位于一个Controllers/
文件夹中,应该幸运地位于命名空间文件夹app/
中。
所有这些辛苦工作只是为了得出结论: App\Controllers\AuthController
类存在于app/Controllers/AuthController.php
文件中。为了让composer扫描整个应用程序并创建直接的类和文件1对1关联,请运行以下命令:
composer dumpautoload -o
请注意,如果您已经运行了php artisan optimize --force
,则不必再运行此命令。因为optimize命令已经告诉composer创建了一个优化的自动加载。
这个软件包适用于 php ^7.0 和 ^laravel5.5。
只能在我为此目的创建的cronjob中使用此软件包。我之前也遇到了同样的情况。 https://packagist.org/packages/afrazahmad/clear-cached-data 安装它并运行:
php artisan clear:data
它将自动运行以下命令。
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan clear-compiled
php artisan config:cache
希望这能有所帮助。
如果您想在特定时间自动运行它,那么您首先需要设置cronjob。 例如:
in app/console/kernel.php
在计划函数中:
$schedule->command('clear:data')->dailyAt('07:00');
基本上,我想要清除视图缓存。
现在 Laravel 5.1 中已经有一个命令可以完成此操作。
php artisan view:clear
要在CLI之外清除所有缓存,这样做;这对我有效。
Route::get('/clear', function() {
Artisan::call('cache:clear');
Artisan::call('config:clear');
Artisan::call('config:cache');
Artisan::call('view:clear');
return "Cleared!";
});
config:cache
将清除并缓存配置 - 所以我想不需要同时添加。 - Raja Khoury这个命令可以一次性清除所有类型的缓存:
$ php artisan optimize:clear
这是一个别名:
$ php artisan view:clear
$ php artisan config:clear
$ php artisan route:clear
$ php artisan cache:clear
$ php artisan clear-compiled
此方法添加于Laravel 5.7
您可以通过FTP连接并清除 laravel 5
的 storage\framework\views
文件夹或者 laravel 4
的 app\storage\views
。
php artisan view:clear
将清除缓存的视图
php artisan cache:clear
的问题。这个命令不会清除存储在storage文件夹中的已查看缓存,而这正是所需的。 - Spidi