Por que esse script de log canalizado do apache php não está funcionando corretamente?

1

Eu tenho um programa de log canalizado como este:

#!/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);

e na configuração do meu servidor web eu tenho:

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

A coisa estranha é que eu recebo alguma entrada de log que está escrita, mas apenas muito raramente. muito menos do que no arquivo de log padrão. Eu também não consigo reconhecer um padrão.

Eu também esperei o tempo suficiente e verifiquei com êxito as linhas de log ausentes de um período de tempo antes da última entrada de log em meu log personalizado de canos - para eliminar a possibilidade de um buffer ter causado isso. alguma idéia?

    
por The Shurrican 08.06.2011 / 20:43

1 resposta

3

Seu script não corresponde exatamente ao esperado para um script de log canalizado do Apache, portanto, o resultado exato é provavelmente indefinido. Um exemplo mínimo de PHP é:

#!/usr/local/bin/php

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

Consulte o link para obter mais detalhes. Primeiro, comece a trabalhar para que simplesmente exiba tudo o que recebe e, em seguida, adicione recursos a ele conforme necessário.

    
por 08.06.2011 / 20:57