SmxCde SmxCde - 1 year ago 116
Git Question

Execute GIT command from PHP and get error message back

When I try to execute something legitimate - it works, like

$result = `git tag`

returns me a list of available tags.

But when I do something that should return error, like

$result = `git clone https://`

it returns me
, but not message
fatal: could not create work tree dir ''.: No such file or directory
that I would see in the console.

How can I run a command and get error message from PHP?

UPD: It is not question "how to clone repo with using PHP", it is "How to retreive error message if something goes wrong" Does not matter what, in my example - "broken" repository link.

Answer Source

Try this

 * Executes a command and reurns an array with exit code, stdout and stderr content
 * @param string $cmd - Command to execute
 * @param string|null $workdir - Default working directory
 * @return string[] - Array with keys: 'code' - exit code, 'out' - stdout, 'err' - stderr
function execute($cmd, $workdir = null) {

    if (is_null($workdir)) {
        $workdir = __DIR__;

    $descriptorspec = array(
       0 => array("pipe", "r"),  // stdin
       1 => array("pipe", "w"),  // stdout
       2 => array("pipe", "w"),  // stderr

    $process = proc_open($cmd, $descriptorspec, $pipes, $workdir, null);

    $stdout = stream_get_contents($pipes[1]);

    $stderr = stream_get_contents($pipes[2]);

    return [
        'code' => proc_close($process),
        'out' => trim($stdout),
        'err' => trim($stderr),

And then test

$res = execute('git --version')

    [code] => 0
    [out] => git version 2.1.4
    [err] => 

This will give you what you want

$res = execute('git clone http://...')

    [code] => 128
    [out] => 
    [err] => Cloning into '...'...
             fatal: unable to access 'http://.../': Could not resolve host: ..
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download