How to retrieve PHP exec() error responses?

62,977

Solution 1

You can receive the output result of the exec function by passing an optional second parameter:

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess',$output);
var_dump($output);

Solution 2

The following code will capture both the normal output (from StdOut) and the error output (from SdtErr).

exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess 2>&1',$output);
var_dump($output);

Solution 3

The $output parameter does not appear to work if the calling program spits output to STDERR.

A better way to handle this is to redirect the output from exec to a file and then display the contents of that file if there is an error condition.

If $cmd holds the exec command add something like this:

$cmd.=" > $error_log 2>&1"

Then examine the contents of the filespec in $error_log for detailed info on why the command failed.

Also note that if you fork this off with a & at the end of the command, an immediate check of the contents of $error_log may not reveal the log information - the script may check/process the file before the OS has finished.

Solution 4

This worked for me in several scenarios:

 ob_start();
 exec($cmd . " 2>&1", $output);
 $result = ob_get_contents();
 ob_end_clean();
 var_dump($output);

The space between " 2 is important

Solution 5

this worked for me: Append 2>&1 to the end of your command.

Seen here: php exec() not returning error message in output when executing svn command

Cheers

Share:
62,977
Matt
Author by

Matt

Updated on October 14, 2021

Comments

  • Matt
    Matt over 2 years

    Below is the command I tried executing, without success:

    exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess');
    

    When you add a die() at the end, it catches that there's an error:

    exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess') or die('what?!');
    

    For the above exec() statement, a permissions problem is causing the error, but PHP isn't displaying it. How do you display from PHP what error is occurring?