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

Laravel 5 – Clear Cache in Shared Hosting Server

问题很清楚了

php artisan cache:clear

是否有任何解决方法可以像上述命令一样清除缓存但不使用 CLI。我正在使用流行的共享托管服务,但根据我的计划,我没有控制面板访问权限。

我想清除视图缓存。

我看到一个跟这个差不多,但对我没有帮助

您可以在 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 路径并清除在您从控制器或路由调用的某些 class 中查看缓存。

但是,我真正的问题是你真的需要清除视图缓存吗?在我现在正在进行的一个项目中,我有近 100 个缓存视图,它们的重量不到 1 Mb,而我的 vendor 目录大于 40 Mb。我不认为视图缓存是磁盘使用的真正瓶颈,从来没有真正需要清除它。

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

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

Basically I want to clear the views cache.

Laravel 5.1 中现在有一个命令

php artisan view:clear

如我所见: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>';
});

没有必要让每个人都可以清除缓存,尤其是在生产环境中,所以我建议评论路由,并在需要时评论 de-comment 代码和 运行 路线。

转到 laravelFolder/bootstrap/cache,然后将 config.php 重命名为您想要的任何名称,例如。 config.php_old 并重新加载您的网站。那应该像巫术一样工作。

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

php artisan config:cache

请记住,一旦缓存配置,对配置的任何更改都不会产生任何影响。要刷新配置缓存,运行 再次执行上述命令。如果您想完全摆脱配置缓存,运行

php artisan config:clear

路由缓存 在 laravel 中,路由也是一项昂贵的任务。要缓存 routes.php 文件 运行 以下命令:

php artisan route:cache

请注意它不适用于闭包。如果您正在使用闭包,这是将它们移动到控制器中的好机会,因为 artisan 命令在尝试编译绑定到闭包而不是正确的控制器方法的路由时会抛出异常。 与配置缓存相同,对 routes.php 的任何更改将不再有任何效果。要刷新缓存,运行 每次更改路由文件时执行上述命令。要完全摆脱路由缓存,运行 下面的命令:

php artisan route:clear

Classmap优化

一个中型项目分布在数百个 PHP 文件中并不少见。由于良好的编码行为要求我们,一切都有自己的文件。当然,这并非没有缺点。 Laravel 必须为每个请求包含几十个不同的文件,这是一件代价高昂的事情。

因此,一个好的优化方法是声明每个请求使用哪些文件(例如,这是您所有的服务提供商、中间件等)并将它们组合在一个文件中,这将在以后为每个请求加载。这与将所有 javascript 文件合并为一个文件没有什么不同,因此浏览器将不得不向服务器发出更少的请求。

您应该在 config/compile.php 文件键中声明额外的编译文件(同样:服务提供商、中间件等)。一旦你把所有对你的应用程序发出的请求所必需的东西都放在那里,将它们连接到一个文件中:

php artisan optimize --force

优化作曲家自动加载

这个不仅适用于 laravel,而且适用于任何使用 composer 的应用程序。

我将首先解释 PSR-4 自动加载是如何工作的,然后我将向您展示您应该 运行 优化它的命令。如果您对了解 composer 的工作原理不感兴趣,我建议您直接跳转到控制台命令。

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

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

composer dumpautoload -o

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

如果您在 routes/web.php 文件中使用来自 LaravelLumen,则可以执行此操作:

use Illuminate\Support\Facades\Artisan;

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

虽然我强烈反对 运行 在共享主机上安装 laravel 应用程序的想法(这是一个糟糕的想法),但这个软件包可能会解决您的问题。它是一个允许您 运行 来自网络的一些 artisan 命令的包。它远非完美,但可以用于某些用例。

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

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

您也可以通过路由器完成此操作,类似于 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 等 如果您需要 add/edit 有效的 Artisan 命令,只需更新 $validCommands 数组。

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

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!";

});

缓存::刷新(); https://laravel.com/docs/5.7/cache#events 这项工作在 class Handler extends ExceptionHandler

也试试这个

用于客户端

php artisan clear:cache

使用 artisan 命令

 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/

使用此页面几次将快速命令复制并粘贴到 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

我相信更有效的方法是使用共享服务器管理面板中的 cron 作业模块来 运行 laravel 调度程序命令,后者将依次调用配置的 artisan 命令,像这样的东西应该可以完成工作:

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

使用 cron 中的调度程序设置,您可以编辑 \App\Console\Kernel.php 中的 调度方法 以调用正确的 artisan 命令,像这样:

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

您可以随时删除上述命令后的行 运行

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

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

这条命令会一次性清除各种缓存。 :

$ 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

本地计算机

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

在托管服务器上

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

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

  1. 进入这个目录project-folder/bootstrap/cache
  2. 重命名或删除 config.php 文件

注意:避免删除文件它可能会在将来通过重命名产生问题你可以更改文件名所以我建议重命名文件名。