Commit | Line | Data |
---|---|---|
c495c100 P |
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 | ?> |