Salvar quantas pessoas acessaram uma página com php *

Olá!

Pediram-me para fazer, apenas um arquivo com todos os acessos do site usando PHP.
atividades do usuário

Outra regra e que se retorna uma imagem transparente com 1px/1px.

Então fiz uma rotinas em PHP bem simples:

		$item = array(
			'REMOTE_ADDR' => $_SERVER['REMOTE_ADDR'],
			'REQUEST_TIME' => $_SERVER['REQUEST_TIME'],
			'PATH_INFO'    => $_SERVER['PATH_INFO'],
			'HTTP_USER_AGENT' => $_SERVER['HTTP_USER_AGENT'],
			'get' => @$_GET,
			'post' => @$_POST,
		);
		$myFile = "testFile.txt";
		$fh = fopen($myFile, 'a') or die("can't open file");
		$stringData = json_encode($item). "n";
		fwrite($fh, $stringData);
		fclose($fh);
		Header( "Content-type: image/gif");
		Header( "Expires: Wed, 11 Nov 1998 11:11:11 GMT");
		Header( "Cache-Control: no-cache");
		Header( "Cache-Control: must-revalidate");
		printf ("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
                  71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,0 ,2,2,68,1,0,59);
		exit;

Bom, neste caso, estou apenas fazendo “append” num arquivo, depois, quando for necessário, farei um perl (ou um PHP) para analisar tais dados.

Cada linha do arquivo é comporta por um JSON com a estrutura igual ao do array $item.

Um ponto positivo nesta opção é que pode-se usar tanto num e-mail quanto numa página qualquer do site, pois, não é necessário um javascript.

Assim você pode salvar quantas pessoas acessam uma pagina de forma eficiente e consultar executando um “grep”!


Mas continue lendo!

Depois de entregar o script, fiz algumas alterações nele script acima para poder permitir que seja executado algum processamento sem fazer o GIF demorar em responder.

Basicamente desabilita o gzip e fecha a conexão e continua executando o código.

Para saber mais pesquise sobre como executar código PHP depois de fechar a conexão com php, ou executar comando demorados no php.

 

arquivo.php

	@apache_setenv('no-gzip', 1);
	@ini_set('zlib.output_compression', 0);
	@ini_set('output_buffering', 'off');
	ob_end_clean();
	header("Connection: close");
	ignore_user_abort(); // optional
	ob_start();
	header( "Content-type: image/gif");
	header( "Expires: Wed, 11 Nov 1998 11:11:11 GMT");
	header( "Cache-Control: no-cache");
	header( "Cache-Control: must-revalidate");
	printf ("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
		71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,0 ,2,2,68,1,0,59);
	$size = ob_get_length();
	header("Content-Length: $size");
	ob_end_flush();
	flush();
	# da qui pra baixo nao adianta mudar o conteudo da tela...
	$item = array(
		'REMOTE_ADDR' => $_SERVER['REMOTE_ADDR'],
		'REQUEST_TIME' => $_SERVER['REQUEST_TIME'],
		'PATH_INFO'    => $_SERVER['PATH_INFO'],
		'HTTP_USER_AGENT' => $_SERVER['HTTP_USER_AGENT'],
		'get' => @$_GET,
		'post' => @$_POST,
	);
	$myDir     = "/home/renato/log";
	$importDir = "/home/renato/log-para-processar";
	$run_perl  = array ('/projetos/processador-de-logs', 'importador-de-logs.pl', 'log.txt');
	$today = "log-".date('Y-m-d').".txt";
	$myFile = $myDir . "/$today";
	# escreve no arquivo o log do get
	$fh = fopen($myFile, 'a') or die("can't open file");
	$stringData = json_encode($item). "n";
	fwrite($fh, $stringData);
	fclose($fh);
	$proc = 0;
	# pega a lista de todos os arquivos que estão dentro de $myDir para mover para o $importDir ao menos que seja o $myFile
	$myDirectory = opendir($myDir);
	// get each entry
	while($entryName = readdir($myDirectory)) {
		if (substr($entryName, 0, 3) == 'log' && is_file("$myDir/$entryName") && $entryName != $today){
			rename("$myDir/$entryName", "$importDir/$entryName");
			$proc++;
		}
	}
	closedir($myDirectory);
	if ($proc){
		# executa o perl
		`(cd $run_perl[0]; perl $run_perl[1] 1>> $run_perl[2] 2>&1 &)>/dev/null`;
	}

Claro que você pode remover o código perl que é executado, ou até mesmo a separação de arquivos.

Fica a seu critério!

This entry was posted in geral. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>