Command line output bypasses my capture!

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
I'm trying to capture output from a command line utility (XMLSec), but
only get an empty result.  If I call the script from the command line,
I see XMLSec's output, but I can't seem to capture it!

My PHP installation is working correctly and captures other command
line output just fine, XMLSec is the only exception I've found.  I've
also tried a couple of other systems to confirm this behavior.

Capture methods I've tried include:

- shell_exec

- exec, with and without output array

- system

- passthru combined with output buffering

- fread-ing from popen('xmlsec1...', 'r')

- proc_open

I get the same result for each of these: an empty string (or array in
the case of exec's $output).

Any idea what's happening here?  Any help would be much appreciated.

Re: Command line output bypasses my capture!

Quoted text here. Click to load it

 Is it writing to stderr (standard error) instead of stdout (standard output)?
Andy Hassall :: :: :: disk and FTP usage analysis tool

Re: Command line output bypasses my capture!

Quoted text here. Click to load it

One of those slap-forehead-with-palm "D'oh!  I'm an idiot!" moments.

Thank you!  Yes, of course, that's exactly what's happening.

IMO, that's a very odd way for a utility to act, but that doesn't make
me feel any less an idiot!

For anyone stumbling into this thread with a similar problem, you need
to reroute stderr to stdout (and stdout to /dev/null if you want
errors only), like so:

var_dump(shell_exec('xmlsec1 verify --id-attr:id Body --trusted-pem
my_public.crt my_signed.xml * 2>&1 1>/dev/null'));

Thanks again!

Site Timeline