2010/3/23 Marten Lehmann <lehmann@xxxxxx> > 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 > > Hi, I can reproduce it with some differences. Check this out: $ php --version PHP 5.2.10-2ubuntu6.4 with Suhosin-Patch 0.9.7 (cli) (built: Jan 6 2010 22:56:44) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies $ php 1>/dev/null # note that the PHP error messages are displayed on STDOUT - I don't show them with "1>/dev/null" <? $x = fopen('php://stderr', 'r'); fwrite($x, "test\n"); fclose($x); $x = fopen(STDERR, 'r'); fwrite($x, "test2\n"); fclose($x); ?> ------------ <? fwrite(STDERR, "test3\n"); fwrite ('php://stderr', "test4"); ?> ----------- Result: test -------- So my assumption is, that the quoted recommendation is outdated / wrong. Regards PS: PHP reports this when giving the constant STDERR: Warning: fopen(STDERR): failed to open stream: No such file or directory Warning: fwrite(): supplied argument is not a valid stream resource