How to retrieve PHP exec() error responses?
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
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.
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);