php-shellcommand provides a simple object oriented interface to execute shell commands.
Your php version must be 5.4 or later.
This package can be installed easily using composer.
composer require mikehaertl/php-shellcommand
- Catches stdOut,stdErrandexitCode
- Handle argument escaping
- Pass environment vars and other options to proc_open()
<?php
use mikehaertl\shellcommand\Command;
// Basic example
$command = new Command('/usr/local/bin/mycommand -a -b');
if ($command->execute()) {
    echo $command->getOutput();
} else {
    echo $command->getError();
    $exitCode = $command->getExitCode();
}// Create command with options array
$command = new Command(array(
    'command' => '/usr/local/bin/mycommand',
    // Will be passed as environment variables to the command
    'procEnv' => array(
        'DEMOVAR' => 'demovalue'
    ),
    // Will be passed as options to proc_open()
    'procOptions' => array(
        'bypass_shell' => true,
    ),
));
// Add arguments with correct escaping:
// results in --name='d'\''Artagnan'
$command->addArg('--name=', "d'Artagnan");
// Add argument with several values
// results in --keys key1 key2
$command->addArg('--keys', array('key1','key2'));
// Add string to pipe to command on standard input
$command->setStdIn('string');- $escapeArgs: Whether to escape any argument passed through- addArg(). Default is- true.
- $escapeCommand: Whether to escape the command passed to- setCommand()or the constructor. This is only useful if- $escapeArgsis- false. Default is- false.
- $useExec: Whether to use- exec()instead of- proc_open(). This is a workaround for OS which have problems with- proc_open(). Default is- false.
- $captureStdErr: Whether to capture stderr when- useExecis set. This will try to redirect the otherwhise unavailable- stderrto- stdout, so that both have the same content on error. Default is- true.
- $procCwd: The initial working dir passed to- proc_open(). Default is- nullfor current PHP working dir.
- $procEnv: An array with environment variables to pass to- proc_open(). Default is- nullfor none.
- $procOptions: An array of- other_optionsfor- proc_open(). Default is- nullfor none.
- $nonBlockingMode: Whether to set the stdin/stdout/stderr streams to non-blocking mode when- proc_open()is used. This allows to have huge inputs/outputs without making the process hang. The default is- nullwhich will enable the feature on Non-Windows systems. Set it to- trueor- falseto manually enable/disable it. Note that it doesn't work on Windows.
- $timeout: The time in seconds after which the command should be terminated. This only works in non-blocking mode. Default is- nullwhich means the process is never terminated.
- $locale: The locale to (temporarily) set with- setlocale()before running the command. This can be set to e.g.- en_US.UTF-8if you have issues with UTF-8 encoded arguments.
You can configure all these properties via an array that you pass in the constructor. You can also
pass command, execCommand and args as options. This will call the respective setter (setCommand(),
setExecCommand(), etc.).
- __construct($options = null)- $options: either a command string or an options array (see- setOptions())
 
- setOptions($options): Set command options- $options: array of name => value options that should be applied to the object. You can also pass options that use a setter, e.g. you can pass a- commandoption which will be passed to- setCommand().
 
- setCommand($command): Set command- $command: The command or full command string to execute, like- gzipor- gzip -d. You can still call- addArg()to add more arguments to the command. If- $escapeCommandwas set to- true, the command gets escaped through- escapeshellcmd().
 
- getCommand(): The command that was set through- setCommand()or passed to the constructor.
- getExecCommand(): The full command string to execute.
- setArgs($args): Set argument as string- $args: The command arguments as string. Note, that these will not get escaped!
 
- getArgs(): The command arguments that where set through- setArgs()or- addArg(), as string
- addArg($key, $value=null, $escape=null): Add argument with correct escaping- $key: The argument key to add e.g.- --featureor- --name=. If the key does not end with and- =, the- $valuewill be separated by a space, if any. Keys are not escaped unless- $valueis null and- $escapeis- true.
- $value: The optional argument value which will get escaped if- $escapeArgsis true. An array can be passed to add more than one value for a key, e.g.- addArg('--exclude', array('val1','val2'))which will create the option "--exclude 'val1' 'val2'".
- $escape: If set, this overrides the- $escapeArgssetting and enforces escaping/no escaping
 
- setStdIn(): String or resource to supply to command via standard input.
- getOutput(): The command output as string. Empty if none.
- getError(): The error message, either stderr or internal message. Empty if no error.
- getStdErr(): The stderr output. Empty if none.
- getExitCode(): The exit code.
- getExecuted(): Whether the command was successfully executed.
- execute(): Executes the command and returns- trueon success,- falseotherwhise.
Note:
getError(),getStdErr()andgetOutput()return the trimmed output. You can passfalseto these methods if you need any possible line breaks at the end.
