Re: [PHP] constants STDOUT, STDERR, STDIN not working in 5.2.x?

[email protected] (Daniel Egeberg)
Newsgroups php.general
Message-ID <[email protected]>
On Tue, Mar 23, 2010 at 15:50, Jan G.B. <[email protected]> wrote:
>
>
> 2010/3/23 Daniel Egeberg <[email protected]>
>>
>> On Tue, Mar 23, 2010 at 11:47, Marten Lehmann <[email protected]> wrote:
>> > Hello,
>> >
>> > I found different code examples like this, which use the file handle
>> > STDERR
>> > just like this:
>> >
>> > <?php
>> > fwrite(STDERR, "hello\n");
>> > ?>
>> >
>> > Also, the PHP documentation of input/output streams
>> > (http://php.net/manual/de/wrappers.php.php) says:
>> >
>> > "It is recommended that you simply use the constants STDIN, STDOUT  and
>> > STDERR instead of manually opening streams using these wrappers."
>> >
>> > I don't want to use the "php://stderr" wrapper, because this just
>> > creates a
>> > duplicate of the original STDERR handler and if I'm closing
>> > "php://stderr",
>> > the original STDERR still would exist.
>> >
>> > When I'm using this code, I only get:
>> >
>> > <b>Notice</b>:  Use of undefined constant STDERR - assumed 'STDERR' in
>> > <b>/test.php</b> on line <b>4</b><br />
>> > <br />
>> > <b>Warning</b>:  fwrite(): supplied argument is not a valid stream
>> > resource
>> > in <b>/test.php</b> on line <b>4</b><br />
>> >
>> > How can I access the original STDERR handle? The constant should be
>> > there,
>> > but does not exist.
>> >
>> > regards
>> > Marten
>>
>> These I/O streams are only present in the CLI SAPI.
>>
>> --
>> Daniel Egeberg
>>
> Please confirm that the code of my previous replay on this topic (executed
> via php-cli) does not print out "test2" or "test3". The constant is present
> but doesn't work as supposed.
> Regards
>
>

You are making a number of errors there:
1) You are trying to open php://stderr in read mode, but that stream
is write only (I'm not sure why it outputs regardless).
2) You are trying to open STDERR, but that constant holds a stream
resource while fopen() expects a string.
3) You are trying to write to 'php://stderr'. That's not possible. You
cannot pass a string as stream.

The following should work:

daniel@daniel-laptop:~$ cat test.php
<?php
$stderr = fopen('php://stderr', 'w');
fwrite($stderr, 'Error 1' . PHP_EOL);
fwrite(STDERR, 'Error 2' . PHP_EOL);
echo 'Normal echo';
daniel@daniel-laptop:~$ php test.php > /dev/null
Error 1
Error 2
daniel@daniel-laptop:~$ ./src/php-5.2.12/sapi/cli/php test.php > /dev/null
Error 1
Error 2

-- 
Daniel Egeberg
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.