For common commands like 'ls', exec() works fine, eg:
exec('ls',$output,$retval);
var_dump($output,$retval);
// $output contains an array of filenames, and retval === 0
But when trying to execute another program, I can't get the output:
exec('some_command --a_parameter',$output,$retval);
var_dump($output,$retval);
// $output contains an empty array, end $retval === 0
This command prints some lines when executing it directly from the command-line though. I know the command has been successful because of the results (some files updated, data added, etc), and yet I can't see the output.
Any ideas?
All the output was being sent to httpd/error_log when for some * reason, when the application found a warning (something internal, not even fatal)
My solution: When there is no output, assume it failed. My apache logs are going to get dirty, but whatever.
It sounds like the program is outputting its warnings to standard error rather than standard output.
exec
will only catch standard output. I don't know for certain that standard error is always sent to the apache error log, but it seems likely.If you don't need compatibility with non-*nix systems, you can redirect standard error to standard output by appending
2>&1
to the command:This should both make the warnings available to your php program and prevent unnecessary logging.