Re: constants STDOUT, STDERR, STDIN not working in 5.2.x?
| From: | Daniel Egeberg | Date: | Tue, 23 Mar 2010 15:39:12 +0000 |
| Subject: | Re: constants STDOUT, STDERR, STDIN not working in 5.2.x? | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-303143@lists.php.net to get a copy of this message | ||
On Tue, Mar 23, 2010 at 15:50, Jan G.B. <ro0ot.w00t@googlemail.com> wrote:
>
>
> 2010/3/23 Daniel Egeberg <degeberg@php.net>
>>
>> On Tue, Mar 23, 2010 at 11:47, Marten Lehmann <lehmann@cnm.de> 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