为什么这个 apache php 管道日志脚本不能正常工作?

The*_*can 1 php logging pipe apache-2.2

我有一个像这样的管道日志程序:

#!/usr/bin/php
<?php

$fd = fopen("php://stdin", "r");
while(true) {
  $l = fread($fd,8192);
  $l = trim($l);
  if($l =="") continue;
  file_put_contents('/home/proxy/testfile',$l."\n", FILE_APPEND);
}
fclose($fd);
Run Code Online (Sandbox Code Playgroud)

在我的网络服务器配置中,我有:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" proxylog
CustomLog "|/home/proxy/logger.php" proxylog
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我确实收到了一些写入的日志输入,但很少。远小于默认日志文件。我也无法识别模式。

我也等待了足够长的时间,并在我的自定义管道日志中的最后一个日志条目之前的时间范围内成功检查了丢失的日志行 - 以消除缓冲区导致这种情况的可能性。有任何想法吗?

ues*_*esp 5

您的脚本与 Apache 管道日志脚本的预期不完全匹配,因此输出的确切内容可能未定义。一个最小的 PHP 示例是:

#!/usr/local/bin/php

<?php
$stdin = fopen ('php://stdin', 'r');
ob_implicit_flush (true); // Use unbuffered output
while ($line = fgets ($stdin))
{
    print $line;
}
?>
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅http://www.sudleyplace.com/pipederrorlogs.html。首先让它工作,所以它只是输出它收到的所有东西,然后根据需要向它添加功能。