【问题标题】:Laravel 5 – Clear Cache in Shared Hosting ServerLaravel 5 – 清除共享主机服务器中的缓存
【发布时间】:2015-10-05 23:52:16
【问题描述】:

这个问题很清楚。

php artisan cache:clear

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

我想清除视图缓存。

我看到一个question 几乎是这样的,但它对我没有帮助。

【问题讨论】:

  • 在共享主机上运行 Laravel 是疯狂的,IMO,正是出于这种原因。您如何进行迁移?
  • @ceejayoz .. 其实我刚开始这个项目,也是我的第一个 laravel 项目。我还没有来这个迁移的事情..
  • “在共享主机上运行 Laravel 简直太疯狂了”@ceejayoz ...但这是真实的世界。有时你不得不这样做,因为别无选择。
  • 这在 laravel 8 中有效

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    本地机器

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

    在托管服务器上

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      $ php artisan optimize:clear
      

      这是 : 的别名

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 我确认。在 laravel 5.4 中工作。我鞠躬。
        • 唯一的解决方案!如果您想知道为什么有效?只有上帝知道
        • 确认它在将 laravel 5.4 从 Windows 托管到共享托管时消除了 a** 中的痛苦....谢谢!!!
        • 似乎在少数情况下,这是唯一可行的解​​决方案。如果你有一个缓存配置,然后你删除了一个 Facade 或 Service Provider,当你运行命令来创建新的缓存配置时,它会使用现有的缓存配置运行,并尝试引用 Facade 和/或 Service Provider 类不再存在并失败。另一种选择是从配置文件中删除引用,重新生成缓存配置,然后删除实际的 Facade 和/或 Service Provider 类。
        • 对于 Laravel 6.6,要删除缓存,我刚刚删除了 cache 文件夹和 .env 文件中的默认缓存值。但是在再次删除所有这些问题之后......当php artisan optimize。最后这个解决了我的问题,不是通过重命名而是更改 config.php 文件中的键值。谢谢@DeadGuy
        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

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

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

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

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

          【讨论】:

            【解决方案7】:

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

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

            然后在 composer php artisan traqza:clear-everything 中运行命令

            编码愉快。

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

            【讨论】:

              【解决方案8】:

              也试试这个

              为 cli

              php 工匠清除:缓存

              供使用工匠命令

               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/
              

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                  【解决方案10】:

                  清除 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 将清除并缓存配置 - 所以我想没有必要同时添加
                  • 当然。您只需使用您需要的线路。
                  【解决方案11】:
                  php artisan view:clear
                  

                  将清除缓存的视图

                  【讨论】:

                  • 询问命令php artisan cache:clear 的替代方案。这不会清除存储在 storage 文件夹中的已查看缓存,而这正是所需要的。
                  【解决方案12】:

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

                  【讨论】:

                    【解决方案13】:

                    您也可以通过路由器来完成,类似于 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 数组。

                    【讨论】:

                      【解决方案14】:

                      配置缓存 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 自动加载是如何工作的,然后我会告诉你应该运行什么命令来优化它。如果你对 Composer 的工作原理不感兴趣,我建议你直接跳到控制台命令。

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

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

                      composer dumpautoload -o
                      

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

                      【讨论】:

                        【解决方案15】:

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

                        【讨论】:

                          【解决方案16】:

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

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

                          【讨论】:

                            【解决方案17】:

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

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

                            【讨论】:

                              【解决方案18】:

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

                              没有必要让每个人都可以清除缓存,尤其是在生产环境中,所以我建议注释这些路由,并在需要时取消注释代码并运行路由。

                              【讨论】:

                              • 我发现这个 sn-p 最有帮助。
                              • 我对 config:cache 有问题,它在路由或控制器中不起作用,但其他的都起作用。会有什么问题?
                              【解决方案19】:

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

                              现在 Laravel 5.1 中有一个命令

                              php artisan view:clear
                              

                              【讨论】:

                                【解决方案20】:

                                您可以在 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目录中,但前提是您在config/cache.php中配置了file驱动程序。您可以选择许多不同的驱动程序,例如 RedisMemcached,以提高基于文件的缓存的性能。

                                【讨论】:

                                • 您要清除什么缓存cache:clear 命令与 应用程序缓存 一起使用,该缓存可从 Cache 门面访问。
                                • 我要清除视图缓存,视图缓存文件夹中保存了很多页面。还有一个问题,当说应用程序缓存时,它的目标是所有目录。
                                • 感谢您的解释!我不担心磁盘空间 :) 但是一个问题是如果视图缓存没有清除,那么视图中的新更改如何影响网站,是否在 laravel 中发生了任何 I/O 检查?
                                • 我认为它会对文件进行时间戳检查,这比重建刀片模板要快
                                • "没有办法删除视图缓存" 这根本不是真的。您可以使用 php artisan view:clear 来做到这一点。
                                猜你喜欢
                                • 2017-05-22
                                • 1970-01-01
                                • 1970-01-01
                                • 2016-05-21
                                • 2021-10-18
                                • 1970-01-01
                                • 2020-08-31
                                • 1970-01-01
                                相关资源
                                最近更新 更多