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


125

问题很清楚。

php artisan cache:clear

是否有任何变通办法可以像我们在CLI中一样使用以上方法清除缓存。我正在使用流行的共享托管服务,但是按照我的计划,我没有控制面板访问权限。

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

我看到了几乎与此相同的问题,但这无济于事。


2
正是出于这种原因,IMO在共享主机上运行Laravel太疯狂了。您如何进行迁移?
ceejayoz

@ceejayoz ..实际上,我刚刚开始这个项目,也是我的第一个laravel项目。我没来这个迁移的东西还在..
Rinto乔治

11
“在共享主机上运行Laravel太疯狂了” @ceejayoz……但这是真实世界。有时您不得不这样做,因为别无选择。
elb98rm'9

2
@ elb98rm Digital Ocean的VPS每月5美元起。总有一种选择,包括不为不愿意每月支付5美元托管费用的客户工作。
ceejayoz '16

19
@ceejayoz无关紧要-通常我在不是钱,关系,主人和内部政治的地方工作。此外-有时,这实际上不取决于您的整个部门。现实世界意味着您有时需要处理某种情况。如果您从未需要与他人的选择合作,那么您会很幸运或得到庇护...
elb98rm 2016年

Answers:


146

您可以在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目录> 40 Mb。我不认为视图缓存是磁盘使用方面的真正瓶颈,也从未真正需要清除它。

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


1
您要清除哪些缓存?该cache:clear命令与应用程序缓存一起使用,该应用程序缓存是从Cache外观访问的。
Marco Pallante 2015年

我想清除视图缓存,视图缓存文件夹中保存了很多页面。当说应用程序缓存时,还有一个问题,即它所针对的所有目录。
林托·乔治

感谢您的解释!。我不担心磁盘空间不足:)但是一个问题是,如果视图缓存没有清除,那么视图中的新更改如何在网站中受到影响,laravel中是否发生了任何I / O检查?
林托·乔治

1
我认为它会对文件进行时间戳检查,这比重建刀片模板要快
Marco Pallante 2015年

是的,我想是的,无论如何,您帮助我以正确的方式思考,谢谢!
林托·乔治

61

我希望这可以帮助别人

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

快乐编码...


我确定。在laravel 5.4中工作。我鞠躬。
西蒙(Simon)

1
唯一的解决方案!如果您想知道为什么有效?只有上帝知道
Luis Contreras

确认从Windows托管laravel 5.4到共享主机时,它消除了a **中的痛苦...。谢谢!!!
Rikudo Pain

在某些情况下,这似乎是唯一可行的解​​决方案。如果您有一个缓存的配置,然后删除了Facade或服务提供程序,则在运行命令以创建新的缓存配置时,它将使用现有的缓存配置运行,并尝试引用该Facade和/或Service Provider类。不再存在并且失败。另一个选择是从配置文件中删除引用,重新生成缓存的配置,然后删除实际的Facade和/或Service Provider类。
杰森·惠勒

1
对于Laravel 6.6,要删除缓存,我只是删除了cache文件夹&.env文件中的默认缓存值。但是在删除所有这些越来越麻烦的问题之后php artisan optimize。最后,这一解决了我的问题,而不是重命名而是更改了config.php文件中的键值。感谢@DeadGuy
Chandan Sharma

49

如我所见:http : //itsolutionstuff.com/post/laravel-5-clear-cache-from-route-view-config-and-all-cache-data-from-applicationexample.html

是否可以将以下代码与新的clear cache命令一起使用:

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

不必要给所有人清除缓存,特别是在生产环境中,因此,我建议对路由进行注释,并在需要时对代码进行注释并运行路由。


1
我发现此片段最有用。
Haseeb Zulfiqar

我对config:cache有问题,它在路由或控制器中不起作用,但其他方法也起作用。有什么问题吗?
Nayeem

40

配置缓存 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,而且适用于所有使用composer的应用程序。

首先,我将说明PSR-4自动加载的工作方式,然后向您展示您应该运行哪个命令来对其进行优化。如果您对知道作​​曲家的工作方式不感兴趣,建议您直接跳转到控制台命令。

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

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

composer dumpautoload -o

请记住,如果您已经运行过php artisan Optimize --force,则不必再运行此工具。由于optimize命令已经告诉作曲家创建优化的自动加载。


29

该软件包适用于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。例如

 in app/console/kernel.php

日程安排功能:

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

17

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

现在在Laravel 5.1中有一个命令

php artisan view:clear

9

您可以通过FTP连接和清除storage\framework\views文件夹laravel 5app\storage\viewslaravel 4


7

清除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将清除和高速缓存配置-所以我想没有必要同时添加
拉贾·扈利

当然。您只需要使用所需的线即可。
阿莫斯·希希

4
php artisan view:clear

将清除缓存的视图


php artisan cache:clear 询问命令的替代方法。这不会清除存储在存储文件夹中的已查看缓存,这正是需要的。
Spidi '18

2

如果在文件上使用Lumenfrom Laravel,则可以执行以下routes/web.php操作:

use Illuminate\Support\Facades\Artisan;

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

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数组即可。


1

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



1

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

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文件夹中

然后在作曲家中运行命令 php artisan traqza:clear-everything

快乐的编码。

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


0

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

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



0

我相信更有效的方法是使用共享服务器管理面板中的cron作业模块来运行laravel Scheduler命令,该命令反过来会调用已配置的artisan命令,如下所示即可完成这项工作:

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.