у меня есть программа протоколирования, подобная этой:
#!/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
Странно то, что я получаю какие-то записи в журнал, но очень редко. намного меньше, чем в файле журнала по умолчанию. Я также не могу распознать узор.
Я также ждал достаточно долго и успешно проверил отсутствие строк журнала из временного интервала до последней записи журнала в моем настраиваемом журнале с конвейерной передачей - чтобы исключить возможность того, что это вызвано буфером. Любые идеи?
Ваш сценарий не совсем соответствует тому, что ожидается от сценария конвейерного журнала 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 Больше подробностей. Сначала заставьте его работать, чтобы он просто выводил все, что получает, а затем добавляете к нему функции по мере необходимости.