Laravel 5 - 共享主机服务器中的清除缓存

时间:2015-07-16 13:38:10

标签: php laravel-5 command-line-interface

问题非常明确。

php artisan cache:clear

是否有任何解决方法可以清除缓存,就像我们在CLI中使用的那样。我使用的是一种流行的共享托管服务,但根据我的计划,我无法访问控制面板。

**我想清除视图缓存。**

我看到question几乎与此相同,但它对我没有帮助。

提前致谢。

21 个答案:

答案 0 :(得分:122)

您可以在CLI之外调用Artisan命令。

Route::get('/clear-cache', function() {
    $exitCode = Artisan::call('cache:clear');
    // return what you want
});

您可以在此处查看官方文档 http://laravel.com/docs/5.0/artisan#calling-commands-outside-of-cli

<强>更新

无法删除视图缓存。 php artisan cache:clear都没有。

如果你真的想清除视图缓存,我认为你必须编写自己的artisan命令并按照我之前的说法调用它,或者完全跳过artisan路径并清除视图缓存在某些类中,您可以从控制器或路径调用。

但是,我真正的问题是你真的需要清除视图缓存吗?在我正在进行的项目中,我有近100个缓存视图,它们的权重小于1 Mb,而我的vendor目录是&gt; 40 Mb。我不认为视图缓存是磁盘使用的真正瓶颈,并且从未真正需要清除它。

对于应用程序缓存,它存储在storage/framework/cache目录中,但前提是您在file中配置了config/cache.php驱动程序。您可以选择许多不同的驱动程序,例如 Redis Memcached ,以提高基于文件的缓存的性能。

答案 1 :(得分:40)

我可以看到:http://itsolutionstuff.com/post/laravel-5-clear-cache-from-route-view-config-and-all-cache-data-from-applicationexample.html

是否可以将以下代码与新的清除缓存命令一起使用:

//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>';
});

没有必要为每个人清除缓存,特别是在生产环境中,因此我建议对路由进行评论,并在需要时对代码进行取消注释并运行路由。

答案 2 :(得分:38)

我希望这有助于某人

转到laravelFolder/bootstrap/cache,然后将config.php重命名为您想要的任何内容,例如。 config.php_old并重新加载您的网站。这应该像伏都教一样。

快乐编码......

答案 3 :(得分:33)

配置缓存 laravel配置分布在几十个文件中,每个请求的including每个文件都是一个代价高昂的过程。要将所有配置文件合并为一个,请使用:

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

优化作曲家自动加载

这个不仅适用于laravel,也适用于任何使用作曲家的应用程序。

首先我将解释PSR-4自动加载的工作原理,然后我会告诉你应该运行什么命令来优化它。如果您对了解作曲家的工作方式不感兴趣,我建议您直接跳到控制台命令。

当你向作曲家询问App\Controllers\AuthController类时,它首先在类图中搜索直接关联。 classmap是一个包含类和文件的1对1关联的数组。当然,由于您没有手动将Login类及其关联文件添加到类映射中,因此编写器将继续并在命名空间中进行搜索。 因为App是一个PSR-4命名空间,默认情况下是Laravel并且它与app/文件夹相关联,所以编写器会尝试将PSR-4类名转换为具有基本字符串操作过程的文件名。最后,它猜测App\Controllers\AuthController必须位于AuthController.php文件中,该文件位于Controllers/文件夹中,该文件夹应该位于名称空间文件夹中,即app/。 / p>

所有这些努力只是为了让App\Controllers\AuthController文件中存在app/Controllers/AuthController.php类。为了让作曲家扫描整个应用程序并创建类和文件的直接1对1关联,请运行以下命令:

composer dumpautoload -o

请记住,如果你已经运行了php artisan optimize --force,则不必再运行这个了。由于optimize命令已经告诉编写者创建一个优化的自动加载。

答案 4 :(得分:23)

此软件包适用于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

希望它有所帮助。

如果您想在特定时间自动运行,那么您必须先设置crnjob。 e.g。

 in app/console/kernel.php

在日程安排功能中:

$schedule->command('clear:data')->dailyAt('07:00');

答案 5 :(得分:16)

  

基本上我想清除视图缓存。

现在Laravel 5.1中有一个命令

app.class

答案 6 :(得分:8)

您可以通过FTP连接并清除 private void button1_Click(object sender, EventArgs e) { webBrowser1.DocumentText = ParseHist(@"5461EC8C-89E6-40D1-8525-774340083829-Copia.html"); } 的{​​{1}}文件夹或storage\framework\views的{​​{1}}。

答案 7 :(得分:6)

清除CLI之外的所有缓存,请执行此操作;这对我有用。

Route::get('/clear', function() {

   Artisan::call('cache:clear');
   Artisan::call('config:clear');
   Artisan::call('config:cache');
   Artisan::call('view:clear');

   return "Cleared!";

});

答案 8 :(得分:4)

在新的清除缓存命令中使用以下代码:php artisan cache clear

//Clear route cache:
 Route::get('/route-cache', function() {
     // EDIT - the linked article uses route:cache, it should be route:clear
     // $exitCode = Artisan::call('route:cache');
     $exitCode = Artisan::call('route:clear');
     return 'Routes cache cleared';
 });

 //Clear config cache:
 Route::get('/config-cache', function() {
     $exitCode = Artisan::call('config:clear');
     return 'Config cache cleared';
 }); 

// Clear application cache:
 Route::get('/clear-cache', function() {
     $exitCode = Artisan::call('cache:clear');
     return 'Application cache cleared';
 });

 // Clear view cache:
 Route::get('/view-clear', function() {
     $exitCode = Artisan::call('view:clear');
     return 'View cache cleared';
 });

答案 9 :(得分:3)

php artisan view:clear

将清除缓存的视图

答案 10 :(得分:1)

本地机器

在项目根目录的终端中运行 php artisan config:cache

在托管服务器上

首先尝试从托管服务提供商处访问终端。然后在您的项目根目录中运行 php artisan config:cache 命令。

如果您没有终端访问权限,请遵循此技巧。

  1. 转到此目录project-folder/bootstrap/cache
  2. 重命名或删除 config.php 文件

注意: 避免删除文件可能会在以后产生问题 重命名您可以更改文件名所以我建议重命名文件名。

答案 11 :(得分:1)

您也可以通过路由器完成此操作,类似于Francesco的回答,但路由器配置中的混乱程度较小

Route::get('/artisan/{cmd}', function($cmd) {
    $cmd = trim(str_replace("-",":", $cmd));
    $validCommands = ['cache:clear', 'optimize', 'route:cache', 'route:clear', 'view:clear', 'config:cache'];
    if (in_array($cmd, $validCommands)) {
        Artisan::call($cmd);
        return "<h1>Ran Artisan command: {$cmd}</h1>";
    } else {
        return "<h1>Not valid Artisan command</h1>";
    }
});

然后通过访问http://myapp.test/artisan/cache-clear等来运行它们 如果您需要添加/编辑有效的Artisan命令,只需更新$ validCommands数组即可。

答案 12 :(得分:1)

如果您使用Lumen文件中的Laravel routes/web.php,则可以执行此操作:

use Illuminate\Support\Facades\Artisan;

$app->get('/clear-cache', function () {
    $code = Artisan::call('cache:clear');
    return 'cache cleared';
});

答案 13 :(得分:0)

这对我有用。在您的项目中,转到:存储>框架>视图。删除其中的所有文件并刷新页面。

答案 14 :(得分:0)

Cache :: flush(); https://laravel.com/docs/5.7/cache#events Handler类中的这项工作扩展了ExceptionHandler

答案 15 :(得分:0)

也尝试一下

对于cli

php artisan clear:cache

使用工匠命令

 Route::get('/clear-cache', function() {
 $exitCode = Artisan::call('cache:clear');
 return 'Application cache cleared';

});

[https://www.tutsmake.com/laravel-clear-cache-using-artisan-command-cli/][1]

  [1]: https://www.tutsmake.com/laravel-clear-cache-using-artisan-command-cli/

答案 16 :(得分:0)

多次使用此页面将快速命令复制并粘贴到composer中,因此我编写了一个命令,可以在一个artisan命令中执行这些命令。

$DataGridView1.CurrentCell = $DataGridView1.rows[$DataGridView1.RowCount-1].Cells[0]

放置在namespace App\Console\Commands\Admin; use Illuminate\Console\Command; class ClearEverything extends Command { protected $signature = 'traqza:clear-everything'; protected $description = 'Clears routes, config, cache, views, compiled, and caches config.'; public function __construct() { parent::__construct(); } public function handle() { $validCommands = array('route:clear', 'config:clear', 'cache:clear', 'view:clear', 'clear-compiled', 'config:cache'); foreach ($validCommands as $cmd) { $this->call('' . $cmd . ''); } } } 文件夹中

然后在作曲家app\Console\Commands\Admin中运行命令

快乐的编码。

Github-> https://github.com/Traqza/clear-everything

答案 17 :(得分:0)

我相信更有效的方法是使用共享服务器管理面板中的cron作业模块来运行laravel Scheduler命令,该命令反过来会调用已配置的artisan命令,类似的事情应该可以完成:

* * * * * /usr/bin/php /var/www/web/artisan schedule:run /dev/null 2>&1

使用cron中的调度程序设置,您可以在 \ App \ Console \ Kernel.php 中编辑 schedule方法,以调用正确的artisan命令,如下所示:< / p>

$schedule->command('queue:work')->cron('* * * * *')->withoutOverlapping();
$schedule->command('route:cache')->cron('0 0 * * *')->withoutOverlapping();

您始终可以在命令运行后删除上面的行

答案 18 :(得分:0)

虽然我强烈不同意在共享主机上运行laravel应用程序的想法(一个坏主意),但这个包可能会解决您的问题。它是一个允许您从Web运行一些工匠命令的包。它远非完美,但可以用于某些用例。

https://github.com/recca0120/laravel-terminal

答案 19 :(得分:0)

清除缓存删除共享主机缓存文件夹中的所有文件

Laravel project->bootstarp->cache->delete all files

答案 20 :(得分:0)

此命令将一次性清除所有类型的缓存。 :

$ php artisan optimize:clear

这是一个别名:

$ php artisan view:clear
$ php artisan config:clear
$ php artisan route:clear
$ php artisan cache:clear
$ php artisan clear-compiled