Command line output bypasses my capture!
am 20.08.2007 21:33:58 von jdbartlett
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!
am 20.08.2007 22:39:47 von Andy Hassall
On Mon, 20 Aug 2007 19:33:58 -0000, jdbartlett wrote:
>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.
Is it writing to stderr (standard error) instead of stdout (standard output)?
--
Andy Hassall :: andy@andyh.co.uk :: http://www.andyh.co.uk
http://www.andyhsoftware.co.uk/space :: disk and FTP usage analysis tool
Re: Command line output bypasses my capture!
am 20.08.2007 22:59:04 von jdbartlett
On Aug 20, 3:39 pm, Andy Hassall wrote:
> On Mon, 20 Aug 2007 19:33:58 -0000, jdbartlett wrote:
> >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.
>
> Is it writing to stderr (standard error) instead of stdout (standard output)?
> --
> Andy Hassall :: a...@andyh.co.uk ::http://www.andyh.co.ukhttp://www.andyhsoftware.co.uk/space :: disk and FTP usage analysis tool
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!