« README.md » n'existait pas sur « ab8f54abb3f034abf84781d3f89b9eb5fbb28e54 »
Newer
Older
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
global $_SERVER;
global $id_article, $id_breve, $id_rubrique;
// Rejet des robots (qui sont pourtant des humains comme les autres)
if (preg_match(
',google|yahoo|msnbot|crawl|lycos|voila|slurp|jeeves|teoma,i',
$_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))
$log_type = "rubrique";
else if ($log_id_num = intval($id_article))
$log_type = "article";
else if ($log_id_num = intval($id_breve))
$log_type = "breve";
$log_type = "autre";
// Identification du client ("unique")
if ($_SERVER['HTTP_X_FORWARDED_FOR']) {
$client_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$client_ip = $_SERVER['REMOTE_ADDR'];
}
$client_id = substr(md5(
$client_ip . $_SERVER['HTTP_USER_AGENT']
. $_SERVER['HTTP_ACCEPT'] . $_SERVER['HTTP_ACCEPT_LANGUAGE']
. $_SERVER['HTTP_ACCEPT_ENCODING']
), 0,10);
if ($log_referer = $_SERVER['HTTP_REFERER']) {
if (($url_site_spip<>'')
AND strpos('-'.strtolower($log_referer), strtolower($url_site_spip))
AND !$_GET['var_recherche'])
$log_referer = '';
else
$referer_md5 = '0x'.substr(md5($log_referer), 0, 15);
// stockage sous forme de fichier ecrire/data/stats_200511161005/client_id
// 1. Chercher dans les paniers recents (moins de 30 minutes) s'il existe
// deja une session pour ce numero IP. Chaque panier couvre 5 minutes
$content = array();
for ($i = -5; $i <= 0; $i++) {
$panier = date('YmdHi', (intval(time()/300)+$i)*300);
if (@file_exists($s = _DIR_SESSIONS.'stats_'.$panier.'/'.$client_id)) {
lire_fichier($s, $content);
$content = @unserialize($content);
if ($i<0) @unlink($s);
break;
}
// 2. Determiner le fichier session dans le panier actuel
$panier = date('YmdHi', (intval(time()/300))*300);
$dir = _DIR_SESSIONS.creer_repertoire(_DIR_SESSIONS,'stats_'.$panier);
// 3. Plafonner le nombre de hits pris en compte pour un IP (robots etc.)
if (count($content) < 200) {
$entree = trim("$log_type\t$log_id_num\t$log_referer");
$content[$entree] ++;
ecrire_fichier($s, serialize($content));