Como posso acessar o log por meio de um script php?

0

Eu tenho um arquivo de estatísticas no meu servidor apache em

/var/www/vhosts/test/statistics/logs/access_log

Eu tentei usar

echo system('cat /var/www/vhosts/test/statistics/logs/access_log');

em um script php para acessá-lo, mas não recebo saída.

echo system('dir');

fornece a saída esperada do diretório.

cat /var/www/vhosts/test/statistics/logs/access_log

usando uma conexão de putty e como root funciona embora.

Como posso acessar o registro pelo script php?

    
por Zurechtweiser 24.07.2013 / 20:03

2 respostas

1

Seu processo HTTP não pode acessar o arquivo. Um processo Apache do CentOS 6 é executado como o usuário apache. Exemplo:

[root@talara ~]# ps aux | grep httpd
root      2300  0.0  2.7 334744 28020 ?        Ss   Jul10   0:47 /usr/sbin/httpd
apache    8354  0.0  2.0 334744 20536 ?        S    Jul21   0:00 /usr/sbin/httpd
apache    8355  0.0  2.0 334744 20536 ?        S    Jul21   0:00 /usr/sbin/httpd
apache    8356  0.0  2.0 334744 20536 ?        S    Jul21   0:00 /usr/sbin/httpd

Para testar o acesso ao arquivo como o apache que eu faço:

[root@talara ~]# su apache
bash-4.1$ cat /var/log/messages
cat: /var/log/messages: Permission denied
bash-4.1$

A maioria das maneiras que conheço para permitir o acesso direto do Apache a esses arquivos será desaprovada de uma forma ou de outra devido à enorme falha de segurança que ele abre. No entanto, se você acha que tem segurança bloqueada o suficiente, adicione o apache ao arquivo sudoers sem senha (veja? MUITO muito ruim). Então mude seu código PHP para algo como isto:

echo system('sudo cat /var/www/vhosts/test/statistics/logs/access_log');

A contribuição da comunidade para uma melhor abordagem seria bem-vinda.

    
por 24.07.2013 / 21:51
0

Existe um motivo específico pelo qual você está fazendo chamadas do sistema para acessar o arquivo?

Se não, você pode apenas usar as construções existentes dentro do PHP para obter acesso ao arquivo:

$log = file_get_contents('/var/www/vhosts/test/statistics/logs/access_log');

ou

$log = file('/var/www/vhosts/test/statistics/logs/access_log');

    
por 24.07.2013 / 20:30