web-dev-qa-db-fra.com

Comment exécuter des commandes de shell externes de laravel contrôleur?

J'ai besoin d'exécuter des commandes Shell à partir du contrôleur, mais pas seulement pour les fichiers à l'intérieur du projet, ex. système (-'rm /var/www/html/test.html') ou système (' Sudo Unzip /var/www/html/test.zip');

J'appelle la fonction mais rien n'arrive, aucune idée de la manière d'exécuter des commandes de shell externes à partir de contrôleur comme supprimer un fichier dans un autre répertoire?

system('rm /var/www/html/test.html');
//or
exec('rm /var/www/html/test.html')
7
AnonS

Si vous souhaitez exécuter des commandes de votre PHP Application, je vous recommanderais d'utiliser le Symfony Process Composant :

  1. Cours composer require symfony/process
  2. Importer la classe dans votre dossier avec use Symfony\Component\Process\Process;
  3. Exécutez votre commande:

    $process = new Process(['rm', '/var/www/html/test.html']);
    
    $process->run();
    

Alternativement, (si le processus exécutant PHP dispose des autorisations correctes), vous pouvez simplement utiliser PHP - Dislinkink () Fonction pour supprimer le fichier:

unlink('/var/www/html/test.html');
8
Rwd

Je ferais cela avec ce que le cadre fournit déjà:

1) Créez d'abord une classe de commandes:

php artisan make:command TestClean

Cela générera une classe de commande dans l'application\console\commandes

Puis à l'intérieur de la méthode de la poignée de cette classe de commande écrire:

@unlink('/var/www/html/test.html');

Donnez votre commande un nom et une description et exécutez:

php artisan list

Juste pour confirmer que votre commande est répertoriée.

2) Dans votre contrôleur importer une façade artisanale.

use Artisan;

3) Dans votre contrôleur, écrivez ensuite ce qui suit:

Artisan::call('test:clean');

Veuillez vous reporter aux documents pour des utilisations supplémentaires: https://laravel.com/docs/5.7/artisan#Generating-Commands

0
Eden Reich