Re: redirect stdout and stderr to PHP variables? [message #176815 is a reply to message #176813] |
Thu, 26 January 2012 15:18 |
Erwin Moller
Messages: 228 Registered: September 2010
Karma:
|
Senior Member |
|
|
On 1/26/2012 3:11 PM, crankypuss wrote:
> On 01/26/2012 05:25 AM, M. Strobel wrote:
>> 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.
>
> As far as I'm concerned that's pretty useless.
>
>> You can do it with http://es.php.net/manual/en/function.proc-open.php
>> Maybe you should explain what your basic problem is.
>
> I have. Lots of stdout lines with a few stderr lines, I want to output
> the stderr lines *after* stdout instead of interspersed.
>
Hi Crankypuss,
Read this:
http://nl.php.net/manual/en/function.proc-open.php
It is a little more complicated, but you can capture what you need
(STDERR in this case).
Very off topic:
Concerning your wish to intergrate PHP with a windowing environment, I
found this:
http://en.wikipedia.org/wiki/PHP-Qt
I haven't used it myself, only with C++ so I have no clue how good it
all is, but QT is solid.
Regards,
Erwin Moller
--
"That which can be asserted without evidence, can be dismissed without
evidence."
-- Christopher Hitchens
|
|
|