0) { if (ereg($arr_engines[$cnt][1]."([^\&]*)", $query, $vals)) { $keywords = urldecode($vals[2]); } } } else { $keywords = ""; } if (( ($kw_referer_host == "Google") || ($kw_referer_host == "AOL" && !ereg('enc=iso', $query)) || ($kw_referer_host == "MSN") )) { include_ecrire('inc_charsets.php3'); if (!$cset = $ie) $cset = 'utf-8'; $keywords = importer_charset($keywords,$cset); } $buffer["hostname"] = $kw_referer_host; } } $buffer["host"] = $host; if (!$buffer["hostname"]) $buffer["hostname"] = $host; $buffer["path"] = substr($path, 1, strlen($path)); $buffer["query"] = $query; if ($keywords != '') { if (strlen($keywords) > 150) { $keywords = spip_substr($keywords, 0, 148); // supprimer l'eventuelle entite finale mal coupee $keywords = preg_replace('/&#?[a-z0-9]*$/', '', $keywords); } $buffer["keywords"] = trim(entites_html(stripslashes($keywords))); } return $buffer; } // // Optimiser les informations liees aux referers // function supprimer_referers($type = "") { $table = 'spip_referers'; if ($type) { $table .= '_'. $type . 's'; $col_id = 'id_' . $type; $query = "SELECT COUNT(DISTINCT $col_id) AS count FROM $table"; $result = spip_query($query); if ($row = @spip_fetch_array($result)) { $count = $row['count']; } } if (!$count) $count = 1; $query = "SELECT visites FROM $table ". "ORDER BY visites LIMIT ".intval($count * 100).",1"; $result = spip_query($query); $visites_min = 1; if ($row = @spip_fetch_array($result)) { $visites_min = $row['visites']; } $query = "DELETE FROM $table WHERE (date < DATE_SUB(NOW(),INTERVAL 7 DAY) AND visites <= $visites_min) OR (date < DATE_SUB(NOW(),INTERVAL 30 DAY))"; $result = spip_query($query); } // // Compiler les statistiques temporaires : referers (si active) // function calculer_n_referers($nb_referers) { $date = date("Y-m-d"); $result = spip_query("SELECT COUNT(DISTINCT ip) AS visites, referer, HEX(referer_md5) AS md5 ". "FROM spip_referers_temp GROUP BY referer_md5 LIMIT 0,$nb_referers"); $tous = spip_num_rows($result); $referer_insert = ""; $referer_update = ""; $referer_vus = ""; while ($row = @spip_fetch_array($result)) { $visites = $row['visites']; $referer = addslashes($row['referer']); $referer_md5 = '0x'.$row['md5']; $referer_update[$visites][] = $referer_md5; $referer_insert[] = "('$date', '$referer', $referer_md5, $visites, $visites)"; $referer_vus .= "," . $referer_md5; } if ($referer_vus) $referer_vus = "referer_md5 IN (" . substr($referer_vus,1) . ")"; // Mise a jour de la base if (is_array($referer_update)) { while (list($visites, $referers) = each($referer_update)) { $query = "UPDATE spip_referers SET visites = visites + $visites, visites_jour = visites_jour + $visites ". "WHERE referer_md5 IN (".join(', ', $referers).")"; $result = spip_query($query); } } if (is_array($referer_insert)) { $query_insert = "INSERT IGNORE INTO spip_referers ". "(date, referer, referer_md5, visites, visites_jour) VALUES ".join(', ', $referer_insert); $result_insert = spip_query($query_insert); } // Ventiler ces referers article par article $query = "SELECT COUNT(DISTINCT ip) AS visites, id_objet, referer, HEX(referer_md5) AS md5 FROM spip_referers_temp WHERE type='article'" . ($referer_vus ? " AND $referer_vus" : '') . " GROUP BY id_objet, referer_md5"; $result = spip_query($query); $referer_insert = ""; $referer_update = ""; while ($row = @spip_fetch_array($result)) { $id_article = $row['id_objet']; $visites = $row['visites']; $referer = addslashes($row['referer']); $referer_md5 = '0x'.$row['md5']; $referer_update[$visites][] = "(id_article=$id_article AND referer_md5=$referer_md5)"; $referer_insert[] = "('$date', '$referer', $referer_md5, $id_article, $visites)"; } // Mise a jour de la base if (is_array($referer_update)) { while (list($visites, $where) = each($referer_update)) { $query = "UPDATE spip_referers_articles SET visites = visites + $visites ". "WHERE ".join(' OR ', $where); $result = spip_query($query); } } if (is_array($referer_insert)) { $query_insert = "INSERT IGNORE INTO spip_referers_articles ". "(date, referer, referer_md5, id_article, visites) VALUES ".join(', ', $referer_insert); $result_insert = spip_query($query_insert); } // Effacer les referers traites if ($referer_vus) { spip_query("DELETE FROM spip_referers_temp WHERE $referer_vus"); } return $tous ; } // // Afficher les referers d'un article (ou du site) // function aff_referers ($query, $limit=10, $plus = true) { // Charger les moteurs de recherche $arr_engines = stats_load_engines(); $query .= " LIMIT 0,$limit"; $result = spip_query($query); while ($row = spip_fetch_array($result)) { $referer = interdire_scripts($row['referer']); $visites = $row['vis']; $tmp = ""; $buff = stats_show_keywords($referer, $referer); if ($buff["host"]) { $numero = substr(md5($buff["hostname"]),0,8); $nbvisites[$numero] = $nbvisites[$numero] + $visites; if (strlen($buff["keywords"]) > 0) { $criteres = substr(md5($buff["keywords"]),0,8); if (!$lescriteres[$numero][$criteres]) $tmp = " « ".$buff["keywords"]." »"; $lescriteres[$numero][$criteres] = true; } else { $tmp = $buff["path"]; if (strlen($buff["query"]) > 0) $tmp .= "?".$buff['query']; if (strlen($tmp) > 30) $tmp = "/".substr($tmp, 0, 27)."..."; else if (strlen($tmp) > 0) $tmp = "/$tmp"; } if ($tmp) $lesreferers[$numero][] = "$tmp" . (($visites > 1)?" ($visites)":""); else $lesliensracine[$numero] += $visites; $lesdomaines[$numero] = $buff["hostname"]; $lesurls[$numero] = $buff["host"]; $lesliens[$numero] = $referer; } } if (count($nbvisites) > 0) { arsort($nbvisites); $aff = ""; // Le lien pour en afficher "plus" if ($plus AND (spip_num_rows($result) == $limit)) { $lien = $GLOBALS['clean_link']; $lien->addVar('limit',$limit+200); $aff .= "
+++
"; } } return $aff; } ?>