You are on page 1of 3

Semana passada, estive fazendo num pequeno site, uma rea de login.

Foi ento que fi


z uma funozinha no PHP que gera logs dirios dos eventos ocorridos desde o login at o
logoff, como por exemplo, aes tomadas pelos usurios na parte administrativa.
Abaixo, vocs podero conferir o cdigo que utilizei, logicamente adaptado para que fo
sse publicado aqui.
Os arquivos de log so gerados baseado no dia em que se encontra. Como os arquivos
esto em formato .txt, utilizei um prefixo no arquivo, para que o acesso no seja to
bvio por pessoas desautorizadas.
A funo armazena no arquivo a hora da ocorrncia, seguido pelo IP da mquina do cliente
e a mensagem definida por voc.
Vamos ento seguir para o cdigo:
<?php
date_default_timezone_set('America/Sao_Paulo');
function Logger($msg){
$data = date("d-m-y");
$hora = date("H:i:s");
$ip = $_SERVER['REMOTE_ADDR'];
//Nome do arquivo:
$arquivo = "Logger_$data.txt";
//Texto a ser impresso no log:
$texto = "[$hora][$ip]> $msg \n";
$manipular = fopen("$arquivo", "a+b");
fwrite($manipular, $texto);
fclose($manipular);
}
?>
Salve o arquivo acima como logger.php
Na linha 3 estou declarando o timezone para So Paulo, mesmo estando no Rio de Jan
eiro, o horrio o mesmo. Isso serve para configurar a data para minha localidade,
j que no meu caso, o servidor se encontra em outro fuso horrio.
Nas linhas 7, 8 e 9 estou declarando as variveis de data, hora e ip da mquina que
gerou o log (cliente).
Na linha 12 est o nome do arquivo. Ser algo do tipo Logger_19-06-2009.txt (dia-ms-a
no). Caso deseje armazenar o log em uma pasta j existente, altere a linha para:
$arquivo = minhapasta/Logger_$data.txt ;
Na linha 17 est a funo de abertura do arquivo. Passando o a+ como parmetro, apenas no
s dias que tiver alguma coisa para ser inserida no log, que o arquivo ser criado
ou se j existir, escrever o registro no fim do arquivo. O parmetro b serve para queste
s de portabilidade ( insero recomendado no manual do php )
As linhas 18 e 19 manipulam e fecham o arquivo definido na linha 12.
Agora vamos para o cdigo onde vamos utilizar nossa funo:
<?php
include "logger.php";
Logger("Testando a funo logger !");
Logger("Como voc pode ver, estou logando uma informao !");
Logger("Teste 1, Teste 2, Teste 3!");

?>
Salve o arquivo acima como teste.php na mesma pgina onde se encontra o logger.php
.
Pronto. O Script acima gera 3 sadas consecutivas no seu arquivo de log.
Conferindo o resultado:
Nome do arquivo gerado:
Logger_19-06-09.txt
Contedo:
[21:57:36][201.7.xxx.xxx]> Testando a funo logger !
[21:57:36][201.7.xxx.xxx]> Como voc pode ver, estou logando uma informao !
[21:57:36][201.7.xxx.xxx]> Teste 1, Teste 2, Teste 3!
Bom, espero que o script sirva para mais algum. :)
===========================================
Atualizao em 13/abril/2011
A leitora Renata nos comentrios de hoje (13/04/11) deixou uma dvida muito boa Vale
a pena editar a matria e acrescentar a soluo dela aqui
Ela estava encontrando problemas para centralizar os arquivos de log em um s luga
r. Ela trabalhava com pastas para organizar seus arquivos, e ao incluir a funo log
ger nos arquivos, fazia com que os logs fossem gravados separadamente em cada pa
sta.
Por que isso ocorreu ?
Ela estava incluindo a funo da maneira correta: include ../logger.php ; mas o problem
a estava mesmo dentro da funo Logger.
Na varivel $arquivo, onde definimos o nome do arquivo de log, a funo parte do princp
io que o arquivo .txt est do lado do arquivo .php que contm a funo
Consideremos o seguinte path de diretrios:
/
/logs/Logger.txt
/logger.php
/folder1/pagina1.php
Ao incluir a funo logger de dentro da pagina1?, chamando a funo como a Renata fez ( ../
logger.php ), faz com que ao definir a variavel $arquivo = teste.txt o PHP vai salva
r o arquivo dentro da pasta folder1? pois ele interpreta o codigo a partir daquel
e contexto.
Para resolver isso, ao entrar na funo Logger, voce precisa mudar o contexto da exe
cuo para ele salvar o log corretamente na pasta log (independente de onde ela esti
ver), e no final da funo, voc precisa voltar o contexto para onde ele estava, para
evitar possiveis problemas.
Segue ento o novo cdigo que resolve o problema:
<?php
date_default_timezone_set('America/Sao_Paulo');
function Logger($msg){
//pega o path completo de onde esta executanto
$caminho_atual = getcwd();
//muda o contexto de execuo para a pasta logs
chdir("/home/rafaelbiriba/public_html/logs");
$data = date("d-m-y");
$hora = date("H:i:s");
$ip = $_SERVER['REMOTE_ADDR'];
//Nome do arquivo:
$arquivo = "Logger_$data.txt";

//Texto a ser impresso no log:


$texto = "[$hora][$ip]> $msg \n";
$manipular = fopen("$arquivo", "a+b");
fwrite($manipular, $texto);
fclose($manipular);
//Volta o contexto de execuo para o caminho em que estava antes
chdir($caminho_atual);
}
?>

You might also like