如何从 laravel 控制器执行外部 shell 命令?

新手上路,请多包涵

我需要从控制器执行 shell 命令,但不仅限于项目内的文件,例如。系统( ‘rm /var/www/html/test.html’ )或系统( ‘sudo unzip /var/www/html/test.zip’ );

我调用该函数但没有任何反应,知道如何从控制器执行外部 shell 命令,例如删除另一个目录中的一个文件吗?

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

原文由 AnonS 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 604
2 个回答

如果您想从 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();

如果你使用的是 Laravel,你应该可以跳过第 1 步。


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

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


原文由 Rwd 发布,翻译遵循 CC BY-SA 4.0 许可协议

我会用框架已经提供的东西来做到这一点:

1)首先生成命令类:

 php artisan make:command TestClean

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

然后在该命令类的句柄方法中写入:

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

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

 php artisan list

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

  1. 在你的控制器中导入 Artisan facade。
    
    use Artisan;
    

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

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

请参阅文档以进一步使用: https ://laravel.com/docs/5.7/artisan#generating-commands

原文由 Eden Reich 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏