Você precisa usar um fifo. Este é um arquivo "especial" que é realmente um soquete; Quando os processos abrem esse arquivo especial e o lê / grava nele, outros processos conectados obtêm os resultados dessas leituras / gravações.
Por exemplo, o BIND9 seria configurado para logar em um fifo, então seu script PHP também abriria o fifo, e apenas leria dele. Toda vez que o BIND9 escrevia, o PHP retornava uma leitura.
Veja man mkfifo
, mas essencialmente:
mkfifo /var/log/named/log.fifo
Ter BIND9 logar isso (remover as versões e parâmetros de tamanho, eles não funcionarão com um fifo), então o PHP para ler e analisar é com você, mas lembre-se de abrir e ler como qualquer outro. arquivo normal. As leituras serão bloqueadas até que algo seja escrito.
Como teste, você pode fazer isso:
No terminal 1:
mkfifo /tmp/test_fifo
cat /tmp/test_fifo
O cat
será bloqueado porque não há nada para ler ainda. Isso simula a leitura do PHP a partir do test_fifo
.
Agora no terminal 2:
echo foo >/tmp/test_fifo
Observe como o Terminal 1 retorna seu "foo". Isso está simulando BIND9 escrevendo algo em.
Quando você terminar com um fifo, rm
como qualquer outro arquivo normal.