web-dev-qa-db-ja.com

laravelコントローラから外部シェルコマンドを実行する方法は?

コントローラーからシェルコマンドを実行する必要がありますが、プロジェクト内のファイルだけでなく、 system('rm /var/www/html/test.html')またはsystem(' Sudo unzip /var/www/html/test.Zip');

私は関数を呼び出しますが、何も起こりません、別のディレクトリの1つのファイルを削除するようなコントローラーから外部シェルコマンドを実行する方法はありますか?

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

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の nlink() 関数を使用してファイルを削除することもできます。

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

私はフレームワークがすでに提供しているものでこれを行います:

1)最初にコマンドクラスを生成します:

php artisan make:command TestClean

これにより、App\Console\Commandsにコマンドクラスが生成されます

次に、そのコマンドクラスのハンドルメソッド内に次のように書き込みます。

@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

0
Eden Reich