web-dev-qa-db-fra.com

Laravel 5 - Vider le cache sur le serveur d'hébergement partagé

La question est assez claire.

php artisan cache:clear

Existe-t-il une solution de contournement pour effacer le cache comme ci-dessus que nous utilisons dans la CLI J'utilise un service d'hébergement partagé populaire, mais conformément à mon plan, je n'ai pas accès au panneau de configuration.

** Je veux vider le cache des vues. **

J'ai vu une question presque identique à celle-ci, mais cela ne m'aide pas.

Merci d'avance.

93
Rinto George

Vous pouvez appeler une commande artisanale en dehors de la CLI.

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

Vous pouvez consulter le document officiel ici http://laravel.com/docs/5.0/artisan#calling-commands-outside-of-cli


Mettre à jour

Il n'y a aucun moyen de supprimer le cache de vue. Ni l'un ni l'autre php artisan cache:clear ne le fait.

Si vous voulez vraiment vider le cache de vue, je pense que vous devez écrire votre propre commande artisan et l'appeler comme je l'ai déjà dit, ou ignorer entièrement le chemin artisan et effacer le cache de vue dans une classe que vous appelez depuis un contrôleur route.

Mais, ma vraie question est avez-vous vraiment besoin d'effacer le cache de vue? Dans un projet sur lequel je travaille actuellement, j'ai presque 100 vues en cache et leur poids est inférieur à 1 Mo, alors que mon répertoire vendor est supérieur à 40 Mo. Je ne pense pas que le cache de visualisation constitue un véritable goulot d'étranglement dans l'utilisation du disque et que je n'ai jamais eu réellement besoin de le vider.

Quant au cache d'application, il est stocké dans le répertoire storage/framework/cache, mais uniquement si vous avez configuré le pilote file dans config/cache.php. Vous pouvez choisir différents pilotes, tels que Redis _ ou Memcached, pour améliorer les performances sur un cache basé sur des fichiers.

112
Marco Pallante

Comme je vois: http://itsolutionstuff.com/post/laravel-5-clear-cache-from-route-view-config-and-all-cache-data-dom-applicationexample.html

est-il possible d'utiliser le code ci-dessous avec les nouvelles commandes 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>';
});

Il n'est pas nécessaire de donner la possibilité de vider les caches à tout le monde, en particulier dans un environnement de production. Je suggère donc de commenter ces routes et, le cas échéant, de commenter le code et de les exécuter.

39
Francesco

J'espère que ça aidera quelqu'un

Allez à laravelFolder/bootstrap/cache puis renommez config.php comme bon vous semble, par exemple. config.php_old et rechargez votre site. Cela devrait fonctionner comme du vaudou.

Bonne codage ...

33
The Dead Guy

Mise en cache de la configuration La configuration de laravel s’étend sur des dizaines de fichiers et including chacun d’eux pour chaque demande est un processus coûteux. Pour combiner tous vos fichiers de configuration en un, utilisez:

php artisan config:cache

Gardez à l'esprit que toute modification apportée à la configuration n'aura aucun effet une fois que vous l'avez mise en cache. Pour actualiser le cache de configuration, exécutez à nouveau la commande ci-dessus. Si vous souhaitez vous débarrasser complètement du cache de configuration, exécutez

php artisan config:clear

Routing caching Le routage est également une tâche coûteuse en laravel. Pour mettre en cache le fichier routes.php, exécutez la commande ci-dessous:

php artisan route:cache

Remarquez que cela ne fonctionne pas avec les fermetures. Si vous utilisez des fermetures, c'est une excellente occasion de les déplacer dans un contrôleur, car la commande artisan lancera une exception lors de la compilation d'itinéraires liés à des fermetures au lieu des méthodes de contrôleur appropriées . le cache de configuration, toute modification apportée à routes.php n'aura plus aucun effet. Pour actualiser le cache, exécutez la commande ci-dessus chaque fois que vous modifiez le fichier routes. Pour vous débarrasser complètement du cache de route, exécutez la commande ci-dessous:

php artisan route:clear

Optimisation de classmap

Il n'est pas rare qu'un projet de taille moyenne soit réparti sur des centaines de fichiers PHP. De bons comportements de codage nous dictent que tout a son propre fichier. Ceci, bien sûr, ne vient pas sans inconvénients. Laravel doit inclure des dizaines de fichiers différents pour chaque demande, ce qui est une opération coûteuse.

Par conséquent, une bonne méthode d’optimisation consiste à déclarer quels fichiers sont utilisés pour chaque demande (il s’agit par exemple de tous vos fournisseurs de services, de vos middlewares et de quelques autres) et à les combiner dans un seul fichier, qui sera ensuite chargé pour chaque demande. Ce n’est pas différent de la combinaison de tous vos fichiers javascript en un seul. Le navigateur devra donc faire moins de demandes au serveur.

Les fichiers de compilation supplémentaires (encore une fois: fournisseurs de services, middlewares, etc.) doivent être déclarés par vous dans config/compile.php, dans la clé files. Une fois que vous avez mis tout ce qui est essentiel pour chaque demande faite à votre application, concaténez-les dans un seul fichier avec:

php artisan optimize --force

Optimiser le chargement automatique du compositeur

Celui-ci n'est pas uniquement destiné à Laravel, mais à toute application utilisant composeur.

Je vais d'abord expliquer le fonctionnement du chargement automatique du PSR-4, puis je vais vous montrer la commande à exécuter pour l'optimiser. Si vous n'êtes pas intéressé à savoir comment fonctionne Composer, je vous recommande de passer directement à la commande de la console.

Lorsque vous demandez au compositeur la classe App\Controllers\AuthController, il recherche d'abord une association directe dans la mappe de classes. La classmap est un tableau avec des associations 1 à 1 de classes et de fichiers. Puisque, bien entendu, vous n’avez pas ajouté manuellement la classe Login et son fichier associé à la classmap, compositeur passera à la recherche d’espaces de noms ., Étant donné qu’App est un espace de noms PSR-4, fourni par défaut avec Laravel et associé au dossier app/, le compositeur essaiera de convertir le nom de la classe du PSR-4 en un nom de fichier avec les procédures de manipulation de chaîne de base. En fin de compte, il suppose que App\Controllers\AuthController doit se trouver dans un fichier AuthController.php, qui se trouve dans un dossier Controllers/ qui devrait heureusement se trouver dans le dossier de l’espace de nommage, qui est app/.

Tout ce travail acharné pour obtenir que la classe App\Controllers\AuthController existe dans le fichier app/Controllers/AuthController.php. Pour que compositeur analyse l'ensemble de votre application et crée des associations directes de classes et de fichiers, exécutez la commande suivante:

composer dumpautoload -o

Gardez à l'esprit que si vous avez déjà exécuté php artisan optimise --force, vous n'avez plus besoin de l'exécuter. Étant donné que la commande optimise indique déjà au compositeur de créer un chargement automatique optimisé.

33
Maulik

Ce paquet est pour php ^ 7.0 et ^ laravel5.5.

Utilisez ce paquet dans cronjob que j'ai créé uniquement à cette fin . Je faisais également face à la même situation . https://packagist.org/packages/afrazahmad/clear-cached- données Installez-le et exécutez:

php artisan clear:data

et il exécutera automatiquement les commandes suivantes

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

J'espère que ça aide.

Si vous voulez l'exécuter automatiquement à une heure précise, vous devez d'abord configurer crnjob .

 in app/console/kernel.php

Dans la fonction de planification:

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

En gros, je veux vider le cache des vues.

Il existe maintenant une commande dans Laravel 5.1 pour cela

php artisan view:clear
15
Laurence

Vous pouvez vous connecter via FTP et effacer le dossier storage\framework\views pour laravel 5 ou app\storage\views pour laravel 4.

7
gandra404
php artisan view:clear

effacera les vues en cache

3
Spidi

Pour effacer tout le cache en dehors de la CLI , Faites ceci; Cela fonctionne pour moi.

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

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

   return "Cleared!";

});
3
Amos Chihi

Vous pouvez le faire si vous utilisez Lumen à partir de Laravel dans votre fichier routes/web.php:

use Illuminate\Support\Facades\Artisan;

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

Vous pouvez également le faire via un routeur, similaire à Francesco answer mais avec moins d'encombrement dans la configuration du routeur.

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>";
    }
});

Puis exécutez-les via http: //myapp.test/artisan/cache-clear etc .__ en visitant. Si vous devez ajouter/modifier des commandes Artisan valides, mettez à jour le tableau $ validCommands.

1
chemic

Bien que je sois tout à fait en désaccord avec l’idée de lancer une application Laravel sur l’hébergement mutualisé (une mauvaise idée de tous les côtés), ce package résoudra probablement votre problème. C'est un paquet qui vous permet d'exécuter des commandes artisanales à partir du Web. C'est loin d'être parfait, mais cela peut marcher pour certains cas d'utilisation.

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

0
Ben Yanke

Cache :: flush (); https://laravel.com/docs/5.7/cache#events Ce travail dans la classe Handler étend ExceptionHandler.

0
Bilal Hamid

Essayez ceci aussi

pour cli 

php artisan clear: cache

pour commande artisanale 

 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/
0
Devendra Dode

Cela a fonctionné pour moi. Dans votre projet, accédez à: stockage> framework> vues. Supprimez tous les fichiers et actualisez votre page.

0
rogramatic

A utilisé cette page plusieurs fois pour copier et coller des commandes rapides dans composer, j'ai donc écrit une commande qui effectue ces commandes en une seule commande artisanale.

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 . '');

        }
    }
}

Placer dans le dossier app\Console\Commands\Admin

puis exécutez la commande dans composer php artisan traqza:clear-everything

Bonne codage.

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

0
Kray