我有一个像这样的管道日志程序:
#!/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);
在我的网络服务器配置中我有:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" proxylog
CustomLog "|/home/proxy/logger.php" proxylog
奇怪的是,我确实收到了一些写入的日志输入,但很少。比默认日志文件少得多。我也无法识别模式。
我也等待了足够长的时间,并成功检查了自定义管道日志中最后一个日志条目之前的时间范围内缺少的日志行 - 以消除缓冲区导致这种情况的可能性。有什么想法吗?
答案1
您的脚本与 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;
}
?>
看http://www.sudleyplace.com/pipederrorlogs.html了解更多详情。首先让它工作,这样它就可以输出它收到的所有内容,然后根据需要向其中添加功能。