写入 php://stderr 会写入 Apache 下的日志吗?

问题描述 投票:0回答:3

我正在尝试使用 php://stderr 来写入日志。我正在使用 Slim 框架,它利用

@fopen('php://stderr', 'w')
进行日志记录,并且真的希望它能够工作。

以下测试用例应该有效,但只有第一个可以:

// 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 手册并进行谷歌搜索,但没有太多帮助。

特别是,以下来自 PHP 手册关于包装器的引用令人困惑:

建议您只使用常量 STDIN、STDOUT 和 STDERR,而不是使用这些[引用 php://stdin、php://stdout 和 php://stderr] 包装器手动打开流。”

...考虑到上面未定义的常量通知。 (我怀疑这些常量可能仅用于 PHP CLI?- 但我引用的页面没有说明这一点。)

我一直想知道这是否是 Windows 的问题,因为我正在使用 PHP 5.3.8 运行 XAMPP 进行开发,但考虑到 Google 上缺乏主题以及 PHP.net 上的评论,我不再那么确定了。我现在无法访问我的生产服务器日志来进行测试。

php windows xampp stderr
3个回答
19
投票

没关系,明白了。我不太明白

php://stderr
error_log
之间的区别:

error_log
写入PHP错误日志(例如:D:\xampp\php\logs\php_error_log)

php://stderr
写入服务器/Apache 错误日志(例如:D:\xampp pache\logs ror.log)

希望这对其他人有帮助。


2
投票

如果您只是运行 PHP 内置 Web 服务器(从 PHP 5.4.0 开始),那么

php://stderr
将输出到启动 PHP 内置 Web 服务器的控制台屏幕上。


1
投票

您无法

file_put_contents
进入STDERR; STDERR 是一个流资源(已打开)。所以你只能
fwrite
到STDERR。请参阅https://www.php.net/manual/en/features.commandline.io-streams.php

© www.soinside.com 2019 - 2024. All rights reserved.