Re: redirect stdout and stderr to PHP variables? [message #176811 is a reply to message #176809] |
Thu, 26 January 2012 12:25 |
M. Strobel
Messages: 386 Registered: December 2011
Karma:
|
Senior Member |
|
|
Am 26.01.2012 12:14, schrieb crankypuss:
> On 01/26/2012 03:43 AM, Erwin Moller wrote:
>> On 1/26/2012 10:27 AM, crankypuss wrote:
>>> On 01/26/2012 02:00 AM, Tim Streater wrote:
>>>> In article <jfr340125sq(at)news4(dot)newsguy(dot)com>,
>>>> crankypuss <no(at)email(dot)thanks> wrote:
>>>>
>>>> > On 01/25/2012 03:53 PM, crankypuss wrote:
>>>> > > On 01/25/2012 02:46 PM, M. Strobel wrote:
>>>> > >> php> $res1 = exec('rm this-does-really-not-exist.php 2>&1', $a,
>>>> > $rc);
>>>> > >> php> echo $rc;
>>>> > >> 1
>>>> > >> php> print_r($a);
>>>> > >> Array
>>>> > >> (
>>>> > >> [0] => rm: Entfernen von „this-does-really-not-exist.php“ nicht
>>>> > >> möglich: Datei
>>>> > >> oder Verzeichnis nicht gefunden
>>>> > >> )
>>>> > >> php>
>>>> > >
>>>> > > Thanks, will try these in the morning.
>>>> >
>>>> > BTW, where is this syntax documented? I'd prefer understanding it to
>>>> > using magic.
>>>>
>>>> Which syntax, exactly? exec is documented in the PHP online docs.
>>>
>>> Sorry, I've been unable to find the bit about redirecting stdout and
>>> stderr to PHP variables, can you point me to that? Yes, exec() provides
>>> an optional &$output argument which in effect redirects stdout to the
>>> varialble, but I see no way to obtain stderr separately. Thanks.
>>
>> Hi crankypuss,
>>
>> You only see this redirecting in functions that handle with STDERR and
>> STDOUT, functions like exec() you already use.
>> When you are working within 'normal' PHP (as in "No external processes
>> invoked by user", so no exec() and the like) you don't have the concept
>> of STDERR directly, nor do you need it.
>> Of course: errors can still occur, but PHP will handle them. You can
>> modify HOW you want PHP to handle them (logging into file/errorlog, put
>> them on screen, invoke some custom-errorhandler/etc).
>>
>> To put it very simple (and probably incorrect) to get the general idea:
>> You can think of PHP in relation with STDIN and STDOUT and STDERR like
>> this:
>>
>> STDIN for PHP is what is feeded to PHP (via Apache, or commandline)
>> So that consists typically of things like (part of) URL, cookies,
>> referrer, etc.
>>
>> STDOUT is what PHP produces and is returned to the client (most of the
>> time with a webserver inbetween).
>>
>> STDERR is where PHP directs its erorrs to. (Think logfile, and/or to
>> STDOUT: this is all configurable.)
>>
>> But you don't see STDIN/STDOUT/STDERR when you work with PHP without
>> using exec().
>>
>> Regards,
>> Erwin Moller
>
> So how do you capture only STDERR when using exec() ?
You can not capture only stderr, because exec returns only stdout. So you only can
redirect stderr to stdout.
You can do it with http://es.php.net/manual/en/function.proc-open.php
Maybe you should explain what your basic problem is. Mentioning the environment so we
do not have to guess.
/Str.
|
|
|