fwrite到STDERR导致可执行脚本出错


fwrite to STDERR resulting in error in executable script

我有一个奇怪的问题。只有在可执行的php脚本中才会发生此错误,我不知道为什么

警告:fwrite()要求参数1为资源,字符串给定

我有以下例子:

-rwxr-xr-x 1 root root    87 Sep 10 16:55 test*
-rw-r--r-- 1 root root    33 Sep 10 17:10 test.php

文件所在位置/测试是:

#!/usr/bin/php -q
<?php
fwrite(STDERR, "test'n");

文件test.php是(完全相同,只是缺少shebang):

<?php
fwrite(STDERR, "test'n");

我在那台机器上做了一些测试,它的行为真的很奇怪:

# ./test 
<br />
<b>Warning</b>:  fwrite() expects parameter 1 to be resource, string given
# php -q test.php 
test
# php -r 'fwrite(STDERR, "test'n");'
test

有人知道为什么fwrite到STDERR不能(仅)在可执行的php文件中工作吗?

PHP 5.4.28 (cli) (built: May 19 2014 15:39:12)

当我使用shebang #!/usr/local/bin/php时,错误消失了。有道理,因为php是从源代码编译的。

但我仍然不明白为什么会在另一条道路上发生这种情况。我试着使用"错误的"shebang查看phpinfo,但我仍然得到PHP Version 5.4.28作为版本,所以没有多个安装。