如何从Laravel控制器执行外部Shell命令?

时间:2019-01-19 10:14:39

标签: php linux laravel shell controller

我需要从controller执行shell命令,但不仅要对项目中的文件执行ex。系统('rm /var/www/html/test.html')或系统('sudo解压缩/var/www/html/test.zip'); < / p>

我调用了函数,但是什么也没有发生,怎么知道如何从控制器执行外部shell命令,例如删除另一个目录中的一个文件?

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

2 个答案:

答案 0 :(得分:0)

如果要从PHP应用程序运行命令,建议使用Symfony Process Component

  1. 运行composer require symfony/process
  2. 通过use Symfony\Component\Process\Process;将类导入文件中
  3. 执行命令:

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

或者,(如果运行php的进程具有正确的权限),您可以简单地使用PHP的unlink()函数删除文件:

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

答案 1 :(得分:0)

我将使用框架已提供的功能来做到这一点:

1)首先生成命令类:

php artisan make:command TestClean

这将在App \ Console \ Commands中生成命令类

然后在该命令类的handle方法内编写:

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

为命令命名和描述并运行:

php artisan list

只是确认您的命令已列出。

2)在您的控制器中导入Artisan门面。

use Artisan;

3)在您的控制器中,然后输入以下内容:

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

有关更多用途,请参考文档: https://laravel.com/docs/5.7/artisan#generating-commands