コントローラーからシェルコマンドを実行する必要がありますが、プロジェクト内のファイルだけでなく、 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')
PHPアプリケーションからコマンドを実行したい場合、 Symfony Process Component を使用することをお勧めします:
composer require symfony/process
を実行しますuse Symfony\Component\Process\Process;
を使用してファイルにクラスをインポートしますコマンドを実行します。
$process = new Process(['rm', '/var/www/html/test.html']);
$process->run();
または、(phpを実行するプロセスに適切なアクセス許可がある場合)PHPの nlink() 関数を使用してファイルを削除することもできます。
unlink('/var/www/html/test.html');
私はフレームワークがすでに提供しているものでこれを行います:
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