[SPIP] ~2.1.12 -->2.1.25
[velocampus/web/www.git] / www / ecrire / public / stats.php
1 <?php
2
3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
5 * *
6 * Copyright (c) 2001-2014 *
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 // http://doc.spip.org/@public_stats_dist
16 function public_stats_dist() {
17 // $_SERVER["HTTP_REFERER"] ne fonctionne pas partout
18 if (isset($_SERVER['HTTP_REFERER'])) $referer = $_SERVER['HTTP_REFERER'];
19 else if (isset($GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"])) $referer = $GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"];
20
21 // Rejeter pirates et robots (qui sont pourtant des humains comme les autres)
22 if (_IS_BOT OR strlen($referer)!=strcspn($referer,'<>"\'')) return;
23
24 // Ne pas tenir compte des tentatives de spam des forums
25 if ($_SERVER['REQUEST_METHOD'] !== 'GET'
26 OR $_GET['page'] == 'forum')
27 return;
28
29 // rejet des pages 404
30 if (isset($GLOBALS['page']['status'])
31 AND $GLOBALS['page']['status'] == 404)
32 return;
33
34 // Identification du client
35 $client_id = substr(md5(
36 $GLOBALS['ip'] . $_SERVER['HTTP_USER_AGENT']
37 // . $_SERVER['HTTP_ACCEPT'] # HTTP_ACCEPT peut etre present ou non selon que l'on est dans la requete initiale, ou dans les hits associes
38 . $_SERVER['HTTP_ACCEPT_LANGUAGE']
39 . $_SERVER['HTTP_ACCEPT_ENCODING']
40 ), 0,10);
41
42 // Analyse du referer
43 $log_referer = '';
44 if (isset($referer)) {
45 $url_site_spip = preg_replace(',/$,', '',
46 preg_replace(',^(https?://)?(www\.)?,i', '',
47 url_de_base()));
48 if (!(($url_site_spip<>'')
49 AND strpos('-'.strtolower($referer), strtolower($url_site_spip))
50 AND strpos($referer,"recherche=")===false)) {
51 $log_referer =$referer;
52 }
53 }
54
55 //
56 // stockage sous forme de fichier ecrire/data/stats/client_id
57 //
58
59 // 1. Chercher s'il existe deja une session pour ce numero IP.
60 $content = array();
61 $fichier = sous_repertoire(_DIR_TMP, 'visites') . $client_id;
62 if (lire_fichier($fichier, $content))
63 $content = @unserialize($content);
64
65 // 2. Plafonner le nombre de hits pris en compte pour un IP (robots etc.)
66 // et ecrire la session
67 if (count($content) < 200) {
68
69 // Identification de l'element
70 if (isset($GLOBALS['contexte']['id_article']))
71 $log_type = "article";
72 else if (isset($GLOBALS['contexte']['id_breve']))
73 $log_type = "breve";
74 else if (isset($GLOBALS['contexte']['id_rubrique']))
75 $log_type = "rubrique";
76 else
77 $log_type = "";
78
79 if ($log_type)
80 $log_type .= "\t" . intval($GLOBALS['contexte']["id_$log_type"]);
81 else $log_type = "autre\t0";
82
83 $log_type .= "\t" . trim($log_referer);
84 if (isset($content[$log_type]))
85 $content[$log_type]++;
86 else $content[$log_type] = 1; // bienvenue au club
87
88 ecrire_fichier($fichier, serialize($content));
89 }
90 }
91
92 ?>