Skip to content
Extraits de code Groupes Projets
Valider 49f823a5 rédigé par Fil's avatar Fil
Parcourir les fichiers

pour les statistiques : essayer de mieux discriminer entre des navigateurs...

pour les statistiques : essayer de mieux discriminer entre des navigateurs differents sur un meme IP & essayer d'eviter de comptabiliser les bots (par useragent + reperage des fichiers backend)  (discussion generale sur spip-dev, patchs de Nicolas et Antoine)
parent 393b20e2
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -15,13 +15,22 @@ ...@@ -15,13 +15,22 @@
if (!defined("_ECRIRE_INC_VERSION")) return; if (!defined("_ECRIRE_INC_VERSION")) return;
function ecrire_stats() { function ecrire_stats() {
global $_SERVER;
global $id_article, $id_breve, $id_rubrique; global $id_article, $id_breve, $id_rubrique;
if ($GLOBALS['HTTP_X_FORWARDED_FOR']) // Rejet des robots (qui sont pourtant des humains comme les autres)
$log_ip = $GLOBALS['HTTP_X_FORWARDED_FOR']; if (preg_match(
else ',google|yahoo|msnbot|crawl|lycos|voila|slurp|jeeves|teoma,i',
$log_ip = $GLOBALS['REMOTE_ADDR']; $_SERVER['HTTP_USER_AGENT']))
return;
// Ne pas compter les visiteurs sur les flux rss (qui sont pourtant
// des pages web comme les autres) [hack pourri en attendant de trouver
// une meilleure idee ?]
if (preg_match(',^backend,', $GLOBALS['fond']))
return;
// Identification de l'element
if ($log_id_num = intval($id_rubrique)) if ($log_id_num = intval($id_rubrique))
$log_type = "rubrique"; $log_type = "rubrique";
else if ($log_id_num = intval($id_article)) else if ($log_id_num = intval($id_article))
...@@ -31,15 +40,20 @@ function ecrire_stats() { ...@@ -31,15 +40,20 @@ function ecrire_stats() {
else else
$log_type = "autre"; $log_type = "autre";
// Conversion IP 4 octets -> entier 32 bits // Identification du client ("unique")
if (preg_match(",^(::ffff:)?([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$,", if ($_SERVER['HTTP_X_FORWARDED_FOR']) {
$log_ip, $r)) $client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
$log_ip = sprintf("%02x%02x%02x%02x", $r[2], $r[3], $r[4], $r[5]); } else {
else $client_ip = $_SERVER['REMOTE_ADDR'];
return; }
$client_id = substr(md5(
$client_ip . $_SERVER['HTTP_USER_AGENT']
. $_SERVER['HTTP_ACCEPT'] . $_SERVER['HTTP_ACCEPT_LANGUAGE']
. $_SERVER['HTTP_ACCEPT_ENCODING']
), 0,10);
// Analyse du referer // Analyse du referer
if ($log_referer = $GLOBALS['HTTP_REFERER']) { if ($log_referer = $_SERVER['HTTP_REFERER']) {
$url_site_spip = preg_replace(',^((https?|ftp)://)?(www\.)?,i', '', $url_site_spip = preg_replace(',^((https?|ftp)://)?(www\.)?,i', '',
$GLOBALS['meta']['adresse_site']); $GLOBALS['meta']['adresse_site']);
if (($url_site_spip<>'') if (($url_site_spip<>'')
...@@ -51,7 +65,7 @@ function ecrire_stats() { ...@@ -51,7 +65,7 @@ function ecrire_stats() {
} }
// //
// stockage sous forme de fichier dans ecrire/data/stats_200511161005/ip // stockage sous forme de fichier ecrire/data/stats_200511161005/client_id
// //
// 1. Chercher dans les paniers recents (moins de 30 minutes) s'il existe // 1. Chercher dans les paniers recents (moins de 30 minutes) s'il existe
...@@ -59,7 +73,7 @@ function ecrire_stats() { ...@@ -59,7 +73,7 @@ function ecrire_stats() {
$content = array(); $content = array();
for ($i = -5; $i <= 0; $i++) { for ($i = -5; $i <= 0; $i++) {
$panier = date('YmdHi', (intval(time()/300)+$i)*300); $panier = date('YmdHi', (intval(time()/300)+$i)*300);
if (@file_exists($s = _DIR_SESSIONS.'stats_'.$panier.'/'.$log_ip)) { if (@file_exists($s = _DIR_SESSIONS.'stats_'.$panier.'/'.$client_id)) {
lire_fichier($s, $content); lire_fichier($s, $content);
$content = @unserialize($content); $content = @unserialize($content);
if ($i<0) @unlink($s); if ($i<0) @unlink($s);
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter