我正在尝试使用php:// stderr写日志工作。 我正在使用Slim框架,它使用@fopen('php://stderr', 'w')
进行日志logging,并且确实希望这能够工作。
下面的testing用例应该可以工作,但只有第一个testing用例可以:
// 1. error_log - works fine error_log("Written through the error_log function", 0); // 2. PHP wrapper, ie php://stderr - does not work $stderr = fopen( 'php://stderr', 'w' ); fwrite($stderr, "Written through the PHP error stream" ); fclose($stderr); // 3. PHP wrapper also, different syntax, just to be safe - no effect either file_put_contents( "php://stderr","Hello World" ); // 4. PHP wrapper, this time using this elusive constant referred to in the manual - result: "Notice: Use of undefined constant STDERR - assumed 'STDERR' ", ie: failed also! file_put_contents( STDERR, "Hello World" );
我一直在浏览PHP手册和谷歌search了很多,但没有太多的帮助。
特别是,下面的关于包装器的PHP手册引用令人困惑:
build议您只使用常量STDIN,STDOUT和STDERR,而不是使用这些[引用php:// stdin,php:// stdout和php:// stderr]包装手动打开stream。
…给出了上面未定义的常量通知。 (我怀疑这些常量可能只用于PHP CLI – 但是我引用的页面没有说明)。
我一直在想,如果这可能是一个Windows的事情,因为我运行XAMPP与PHP 5.3.8的开发,但由于缺乏关于谷歌的主题和对PHP.net的评论,我不知道了。 我现在无法访问我的生产服务器日志,因此无法进行testing。
没关系,明白了。 我没有完全error_log
php://stderr
和error_log
之间的区别:
error_log
写入PHP错误日志(例如:D:\ xampp \ php \ logs \ php_error_log)
php://stderr
写入服务器/ Apache错误日志(例如:D:\ xampp \ apache \ logs \ error.log)
希望这可以帮助别人。
如果您只是运行PHP内置Web服务器(从PHP 5.4.0开始),那么php://stderr
将被输出到启动PHP内置Web服务器的控制台的屏幕上。