How to execute external shell commands from laravel controller?

血红的双手。 提交于 2020-12-08 06:42:26

问题


I need to execute shell commands from controller , but not only for files inside the project , ex. system('rm /var/www/html/test.html') or system('sudo unzip /var/www/html/test.zip');

I call the function but nothing happen , any idea how to execute external shell commands from controller like removing one file in another directory?

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

回答1:


If you're wanting to run commands from your PHP application I would recommend using the Symfony Process Component:

  1. Run composer require symfony/process
  2. Import the class in to your file with use Symfony\Component\Process\Process;
  3. Execute your command:

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

Alternatively, (if the process running php has the correct permissions) you could simply use PHP's unlink() function to delete the file:

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



回答2:


I would do this with what the framework already provide:

1) First generate a command class:

php artisan make:command TestClean

This will generate a command class in App\Console\Commands

Then inside the handle method of that command class write:

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

Give your command a name and description and run:

php artisan list

Just to confirm your command is listed.

2) In your controller import Artisan facade.

use Artisan;

3) In your controller then write the following:

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

Please refer to the docs for further uses: https://laravel.com/docs/5.7/artisan#generating-commands



来源:https://stackoverflow.com/questions/54266041/how-to-execute-external-shell-commands-from-laravel-controller

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!