Reputation: 263
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')
Upvotes: 25
Views: 63753
Reputation: 1044
Use fromShellCommandline to use direct shell command:
use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;
$process = Process::fromShellCommandline('rm /var/www/html/test.html');
$process->run();
// executes after the command finishes
if (!$process->isSuccessful()) {
throw new ProcessFailedException($process);
}
echo $process->getOutput();
Upvotes: 5
Reputation: 35190
If you're wanting to run commands from your PHP application I would recommend using the Symfony Process Component:
Run composer require symfony/process
Import the class in to your file with use Symfony\Component\Process\Process;
Execute your command:
$process = new Process(['rm', '/var/www/html/test.html']);
$process->run();
If you're using Laravel, you should be able to skip Step 1.
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');
Upvotes: 48
Reputation: 387
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
Upvotes: 3