squellete2
[aidenligne_francais_universite.git] / ecrire / public / stats.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2007 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
8 * *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
12
13 if (!defined("_ECRIRE_INC_VERSION")) return;
14
15 # interface obsolete (?)
16 // http://doc.spip.org/@ecrire_stats
17 function ecrire_stats() {public_stats_dist();}
18
19 // http://doc.spip.org/@public_stats_dist
20 function public_stats_dist() {
21
22 // Rejet des robots (qui sont pourtant des humains comme les autres)
23 if (preg_match(
24 ',google|yahoo|msnbot|crawl|lycos|voila|slurp|jeeves|teoma,i',
25 $_SERVER['HTTP_USER_AGENT']))
26 return;
27
28 // Identification du client
29 $client_id = substr(md5(
30 $GLOBALS['ip'] . $_SERVER['HTTP_USER_AGENT']
31 // . $_SERVER['HTTP_ACCEPT'] # HTTP_ACCEPT peut etre present ou non selon que l'on est dans la requete initiale, ou dans les hits associes
32 . $_SERVER['HTTP_ACCEPT_LANGUAGE']
33 . $_SERVER['HTTP_ACCEPT_ENCODING']
34 ), 0,10);
35
36 // Analyse du referer
37 $log_referer = '';
38 if (isset($_SERVER['HTTP_REFERER'])) {
39 $url_site_spip = preg_replace(',/$,', '',
40 preg_replace(',^(https?://)?(www\.)?,i', '',
41 url_de_base()));
42 if (!(($url_site_spip<>'')
43 AND strpos('-'.strtolower($_SERVER['HTTP_REFERER']), strtolower($url_site_spip))
44 AND !isset($_GET['var_recherche']))) {
45 $log_referer = $_SERVER['HTTP_REFERER'];
46 $referer_md5 = '0x'.substr(md5($log_referer), 0, 15);
47 }
48 }
49
50 //
51 // stockage sous forme de fichier ecrire/data/stats/client_id
52 //
53
54 // 1. Chercher s'il existe deja une session pour ce numero IP.
55 $content = array();
56 $fichier = sous_repertoire(_DIR_TMP, 'visites') . $client_id;
57 if (lire_fichier($fichier, $content))
58 $content = @unserialize($content);
59
60 // 2. Plafonner le nombre de hits pris en compte pour un IP (robots etc.)
61 // et ecrire la session
62 if (count($content) < 200) {
63
64 // Identification de l'element
65 // Attention il s'agit bien des $GLOBALS, regles (dans le cas des urls
66 // personnalises), par la carte d'identite de la page... ne pas utiliser
67 // _request() ici !
68 if (isset($GLOBALS['id_article']))
69 $log_type = "article";
70 else if (isset($GLOBALS['id_breve']))
71 $log_type = "breve";
72 else if (isset($GLOBALS['id_rubrique']))
73 $log_type = "rubrique";
74 else
75 $log_type = "";
76
77 if ($log_type)
78 $log_type .= "\t" . intval($GLOBALS["id_$log_type"]);
79 else $log_type = "autre\t0";
80
81 $log_type .= "\t" . trim($log_referer);
82 if (isset($content[$log_type]))
83 $content[$log_type]++;
84 else $content[$log_type] = 1; // bienvenue au club
85
86 ecrire_fichier($fichier, serialize($content));
87 }
88 }
89
90 ?>