diff --git a/ecrire/inc_statistiques.php3 b/ecrire/inc_statistiques.php3 index 75566a986135a96d4600d2fd00381da08d61d453..388bfc1d9a4999265fc580e1d06d77fa591e998c 100644 --- a/ecrire/inc_statistiques.php3 +++ b/ecrire/inc_statistiques.php3 @@ -94,12 +94,17 @@ function stats_show_keywords($kw_referer, $kw_referer_host) { // Compiler les statistiques temporaires : visites et referers (si active) // -function calculer_referers($date) { - // Referers sur tout le site +function calculer_100_referers() { + $nombre_de_refs = 100; + $date = date("Y-m-d"); + + // Selectionner 100 referers sur tout le site $query = "SELECT COUNT(DISTINCT ip) AS visites, referer, HEX(referer_md5) AS md5 ". - "FROM spip_referers_temp GROUP BY referer_md5"; + "FROM spip_referers_temp GROUP BY referer_md5 LIMIT 0,$nombre_de_refs"; $result = spip_query($query); + $encore = (mysql_num_rows($result) == $nombre_de_refs); + $referer_insert = ""; $referer_update = ""; @@ -110,6 +115,7 @@ function calculer_referers($date) { $referer_update[$visites][] = $referer_md5; $referer_insert[] = "('$date', '$referer', $referer_md5, $visites)"; + $referer_vus[] = $referer_md5; } // Mise a jour de la base @@ -120,15 +126,17 @@ function calculer_referers($date) { $result = spip_query($query); } } + if (is_array($referer_insert)) { $query_insert = "INSERT DELAYED IGNORE INTO spip_referers ". "(date, referer, referer_md5, visites) VALUES ".join(', ', $referer_insert); $result_insert = spip_query($query_insert); } - // Referers par article + // Ventiler ces referers article par article + $where = (is_array($referer_vus)) ? "AND referer_md5 IN (".join(',',$referer_vus).")" : ""; $query = "SELECT COUNT(DISTINCT ip) AS visites, id_objet, referer, HEX(referer_md5) AS md5 ". - "FROM spip_referers_temp WHERE type='article' GROUP BY id_objet, referer_md5"; + "FROM spip_referers_temp WHERE type='article' $where GROUP BY id_objet, referer_md5"; $result = spip_query($query); $referer_insert = ""; @@ -158,8 +166,26 @@ function calculer_referers($date) { $result_insert = spip_query($query_insert); } - $query_effacer = "DELETE FROM spip_referers_temp"; - $result_effacer = spip_query($query_effacer); + if (is_array($referer_vus)) { + $query_effacer = "DELETE FROM spip_referers_temp WHERE referer_md5 IN (".join(",",$referer_vus).")"; + $result_effacer = spip_query($query_effacer); + } + + // a-t-on atteint le dernier referer ? + return $encore; +} + +function calculer_referers() { + $encore = calculer_100_referers(); + if ($encore) { + include_ecrire("inc_meta.php3"); + ecrire_meta ("calculer_referers_now", "oui"); + ecrire_metas(); + } else { + // un peu de menage + supprimer_referers(); + supprimer_referers("article"); + } } @@ -214,9 +240,9 @@ function calculer_visites($date = "") { } } - if (lire_meta('activer_statistiques_ref') != 'non') { +/* if (lire_meta('activer_statistiques_ref') != 'non') { calculer_referers($date); - } + } */ } diff --git a/inc-stats.php3 b/inc-stats.php3 index 4e1a2df8acd48409e4f0510adf4bad26b559c297..7bf4efc347a63394da4fec46e66a79dde54c008c 100644 --- a/inc-stats.php3 +++ b/inc-stats.php3 @@ -8,7 +8,6 @@ define("_INC_STATS", "1"); function ecrire_stats() { global $id_article, $id_breve, $id_rubrique, $admin_ok; - $activer_referers = lire_meta('activer_statistiques_ref'); // Essai de fichier de log simplifie $log_ip = $GLOBALS['REMOTE_ADDR']; @@ -29,9 +28,6 @@ function ecrire_stats() { $log_id_num = 0; } - $date = date("Y-m-d"); - $last_date = lire_meta("date_statistiques"); - // Conversion IP 4 octets -> entier 32 bits if (ereg("^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$", $log_ip, $r)) { $log_ip = sprintf("0x%02x%02x%02x%02x", $r[1], $r[2], $r[3], $r[4]); @@ -39,7 +35,19 @@ function ecrire_stats() { else return; // Archivage des visites temporaires - if ($date != $last_date) { + $date = date("Y-m-d"); + $last_date = lire_meta("date_statistiques"); + + if (lire_meta('calculer_referers_now') == 'oui') { + include_ecrire("inc_connect.php3"); + if ($GLOBALS['db_ok']) { + include_ecrire("inc_meta.php3"); + include_ecrire("inc_statistiques.php3"); + ecrire_meta('calculer_referers_now', 'non'); + ecrire_metas(); + calculer_referers(); + } + } else if ($date != $last_date) { include_ecrire("inc_connect.php3"); if ($GLOBALS['db_ok']) { include_ecrire("inc_meta.php3"); @@ -47,6 +55,11 @@ function ecrire_stats() { ecrire_meta("date_statistiques", $date); ecrire_metas(); calculer_visites($last_date); + // poser un message pour le prochain hit + if (lire_meta('activer_statistiques_ref') == 'oui') { + ecrire_meta('calculer_referers_now','oui'); + ecrire_metas(); + } } } @@ -61,7 +74,7 @@ function ecrire_stats() { } // Log complexe (referers) - if ($activer_referers == 'oui') { + if (lire_meta('activer_statistiques_ref') == 'oui') { $url_site_spip = lire_meta('adresse_site'); $url_site_spip = eregi_replace("^(https?|ftp://)www\.", "\\1(www)?\.", $url_site_spip); $log_referer = $GLOBALS['HTTP_REFERER']; @@ -89,17 +102,15 @@ function ecrire_stats() { } - // Effacer les referers + // traiter les referers toutes les heures $date_refs = lire_meta('date_stats_referers'); - if ((time() - $date_refs) > 24 * 3600) { + if ((time() - $date_refs) > 3600) { include_ecrire("inc_connect.php3"); if ($GLOBALS['db_ok']) { include_ecrire("inc_meta.php3"); ecrire_meta("date_stats_referers", time()); + ecrire_meta('calculer_referers_now', 'oui'); ecrire_metas(); - include_ecrire ("inc_statistiques.php3"); - supprimer_referers(); - supprimer_referers("article"); } }