PageRenderTime 273ms CodeModel.GetById 80ms app.highlight 123ms RepoModel.GetById 58ms app.codeStats 1ms

/modules/visitstat/stats_in.php

https://bitbucket.org/meianki/voguersurlavague
PHP | 933 lines | 640 code | 121 blank | 172 comment | 94 complexity | 02c5ed3ac2b48383049509bc7bbef8f9 MD5 | raw file
  1<?
  2/*
  3 -------------------------------------------------------------------------
  4 AllMyStats V1.37 - Statistiques de fr�quentation visiteurs et robots
  5 -------------------------------------------------------------------------
  6 Copyright (C) 2000 - C�dric TATANGELO (Cedstat)
  7 Copyright (C) 2008 - Herve Seywert
  8 -------------------------------------------------------------------------
  9 Web:   http://www.wertronic.com
 10 -------------------------------------------------------------------------
 11 Ce programme est libre, vous pouvez le redistribuer et/ou le modifier
 12 selon les termes de la Licence Publique G�nrale GNU publi�e par la Free
 13 Software Foundation .
 14 -------------------------------------------------------------------------
 15
 16Fichier stats_in.php ? appel� pour un acc?s public (ou non si $public = false;) au cumul des statistiques du mois en cours
 17Le d�clenchement des mises ? jour et la cr�ation du fichier cache est effectu�e par les visiteurs 
 18suivant le r�glage en minutes de l'interval entre 2 mises ? jour (variable $delai_mise_cache)
 19
 20Exemple:
 21$delai_mise_cache est r�gl� sur 5 (minutes)
 22Une mise ? jour et une mise en cache a �t� effectu�e ? 12H00 : pour tous les visiteurs entre 12H00 et 12H05 c'est le fichier cache qui sera afffich�
 23Le 1er visiteur apr?s 12H05 declenchera un calcul et une mise en cache des stats du mois en cours.
 24Cette solution permet de ne pas recalculer ? chaque visiteur tous les statistiques, et donc menage les ressources serveur.
 25
 26Note
 27Ne pas oublier de mettre les mois �coul�s en cache via l'admin, simplement visualiser le cumul, afin d'all�ger les calculs du mois en cours
 28
 29-----------------------------------------
 30Ajout suffixe diff�rent pour chaque combinaison pour permettre plusieurs configurations dans des pages diff�rentes
 31*/
 32
 33//######################################################## Configuration #######################################################################
 34	
 35	$public = false; //true pour acc?s public si false on ne peut y acc�der seulement si l'on est connect� ? l'admin
 36	$html_body = false; // Si nouvelle page = true - Si int�gr� dans une page existante = false
 37//------------------------------------------------------------------------------
 38/*
 39//Si ce fichier est appel� ? partir d'une ou d'autres pages ? l'aide de 
 40require_once('allmystats/stats_in.php');  // Chemin vers allmystats stats_in.php
 41il est possible de d�placer ces variables juste avant le require, ce qui permet suivant les pages qui l'appellent d'afficher ce que l'on veut
 42Dans ce cas commenter les lignes ci-dessous et voir les fichiers exemples dans /exemple_stats_in
 43*/
 44
 45//Si le stats_in.php est appel� directement par un simple lien vers stats_in.php, d�commenter les lignes ci-dessous ( supprimer /* et */ )
 46/*
 47$html_body = true; // Si nouvelle page = true - Si int�gr� dans une page existante = false
 48$display_graph_by_day = true;	//true ou false ,affichage du graphique viteurs & pages visit�es / jour
 49$display_keywords = true; 		//true ou false ,affichage du tabbleau des mots cl�s
 50$display_page_view = true; 		//true ou false ,affichage du tabbleau pages visit�es
 51$display_org_geo = true; 		//true ou false ,affichage du tabbleau origine g�ographique
 52$AfficheOS = true;				//Affichage OS
 53$AfficheNav = true;				//Affichage Navigateurs utilis�s
 54$AfficheRobots = true;			//Affichage des robots
 55
 56$delai_mise_cache = 5;		//defaut 5 .D�lai en minutes entre 2 mises ? jour du fichier cache du mois en cours. Permet de ne pas surcharger le serveur
 57*/
 58
 59
 60//------------------------------------------------------------------------------
 61//#################################################################################################################################################
 62
 63include_once('application_top.php');
 64require ("config_allmystats.php");
 65require('includes/mysql_tables.php');
 66require ("includes/langues/$langue.php");
 67mysql_connect($mysql_host,$mysql_login,$mysql_pass);
 68mysql_select_db($mysql_dbnom);
 69$mois = trim(date('m/Y',strtotime($UTC." hours", strtotime(date("Y-m-d H:i:s"))))); 
 70
 71/*
 72		//--------------------------------------------
 73		//Bouton de test force la mise en cache
 74		?>
 75		<form name="form" method="post" action="<? $PHP_SELF ?>">
 76				<input class="submit" name="archive_encours" type="submit" value="<? echo "Force: Mise ? jour du cache pour le mois en cours"; ?>" alt="<? echo "Force: Mise ? jour du cache pour le mois en cours"; ?>" >
 77		</form>
 78		<?
 79		//------------------------------------------
 80*/
 81		//$path_allmystats_abs est d�fini dans config_allmystats.php
 82		echo '<link rel="stylesheet" type="text/css" href="'.$path_allmystats_abs.'stylesheet_stats_in.css">';
 83		
 84		$mois_Visualise = $mois;
 85		$Mois_Annee = explode("/", $mois_Visualise);
 86		$format_date_file_name = $Mois_Annee[1].'-'.$Mois_Annee[0];
 87
 88		//---------- Construction du suffixe fichier cache -------------------
 89		$suffixe = "";
 90		if ($display_graph_by_day) {
 91		$suffixe .= "gd";
 92		}
 93		if ($display_keywords) {
 94		$suffixe .= "kw";
 95		}
 96		if ($display_page_view) {
 97		$suffixe .= "pv";
 98		}
 99		if ($display_org_geo) {
100		$suffixe .= "ge";
101		}
102		if ($AfficheOS) {
103		$suffixe .= "os";
104		}
105		if ($AfficheNav) {
106		$suffixe .= "na";
107		}
108		if ($AfficheRobots) {
109		$suffixe .= "ro";
110		}
111		
112		//-------------------------------------------------------------------
113		//Mise en en forme ($AllBots) pour preg_match des bot connus (dans la table + bot en g�n�rale (bot, spider , etc)
114		$result1=mysql_query("select bot_name, org_name, crawler_url, crawler_info from ".TABLE_CRAWLER." "); 
115		$AllBots = '/Bot|Slurp|Scooter|Spider|crawl|';
116
117		while($row=mysql_fetch_array($result1)){
118			$Form_chaine = str_replace('/','\/',$row['bot_name']);
119			$Form_chaine = str_replace('+','\+',$Form_chaine);
120			$Form_chaine = str_replace('(','\(',$Form_chaine);
121			$Form_chaine = str_replace(')','\)',$Form_chaine);
122			$AllBots .= $Form_chaine.'|';
123		}
124
125		$AllBots = substr($AllBots,0,strlen($AllBots)-1); //supp last |
126		$AllBots .= '/i';
127		//-----------------------------------------------------------------------------
128		//------------------------ Mise en tableau de la table bad user agent ---------
129		unset($Matrice_bad_user_agent);
130		$Bad_User_Agent=mysql_query("select * from ".TABLE_BAD_USER_AGENT.""); //
131		while($bad_agents=mysql_fetch_array($Bad_User_Agent)){ // Mise en tableau des bad agents
132			$Matrice_bad_user_agent[] = array($bad_agents['user_agent'], $bad_agents['info'],$bad_agents['type']);
133		}
134		//-----------------------------------------------------------------------------
135
136		// Sinon fait: //Warning: filemtime() [function.filemtime]: SAFE MODE Restriction in effect. ? Pour $path_allmystats_abs
137		$Racine_abs = str_replace($_SERVER['PHP_SELF'],"",$_SERVER['SCRIPT_FILENAME']);
138		$path_allmystats = $Racine_abs.$path_allmystats_abs;
139
140		$cache_mois_in = "";
141
142	if( ($user_login!=$_SESSION['userlogin'] || $passwd!=$_SESSION['userpass']) && $public==false)	{
143		echo "<br><br><center><strong>Vous n'?tes pas autoris� ? visiter cette page</center></strong><br>";
144		exit;
145	} else {
146		if ( date('YmdHi') >= date ("YmdHi", @filemtime($path_allmystats."cache/stats_".$site."_".$format_date_file_name."-".$suffixe.".php")) + $delai_mise_cache || isset($archive_encours) ){
147			//echo "<br><strong>Todo mise en cache</strong><br>";
148			$action_cache_mois_in = true;
149			msg_temporaire("Op�ration en cours, veuillez patienter...");
150			echo '<p align="center"><big><strong>Statistiques site: '.$site." - Mois: ".$mois_Visualise.'</strong></big><br>Derni?re mise ? jour: '.date('d/m/Y ? H:i').'<br></p>';
151		} else {
152			//echo "<br><strong>Pas de mise en cache ? faire</strong><br>";
153			$action_cache_mois_in = false;
154			echo "<center>Derni?re mise ? jour: ".date("d/m/Y ? H:i", filemtime($path_allmystats."cache/stats_".$site."_".$format_date_file_name."-".$suffixe.".php"))."</center>" ; //Date de d?rni?re mise ? jour du fichier
155			include_once($path_allmystats."cache/stats_".$site."_".$format_date_file_name."-".$suffixe.".php");
156		}
157	}
158		//-------------------------------------------------------------------
159
160if ($action_cache_mois_in) {
161
162		//----------------------------------------------
163		//Calcul Nb visiteurs et pages hors bot Robots
164		$result=mysql_query("select * from ".TABLE_VISITEUR." where date like '%$mois'");
165		
166		$NbpageVues_HorsBots=0;
167		$NbVisites_HorsBots=0;
168		while($row=mysql_fetch_array($result)){
169			if(!preg_match($AllBots, $row[agent])) {
170			//---------------------------------------
171				$User_Agent=$row[agent];
172				$trash=false;
173				for($nb_bad_user_agent=0;$nb_bad_user_agent<count($Matrice_bad_user_agent);$nb_bad_user_agent++){
174					if ($Matrice_bad_user_agent[$nb_bad_user_agent][0] == $User_Agent && $Matrice_bad_user_agent[$nb_bad_user_agent][2]=='S') {
175						$trash=true;
176					}
177				}
178			//---------------------------------------
179			}
180
181			if(!preg_match($AllBots, $row[agent]) && $trash==false) {		
182				$NbpageVues_HorsBots = $NbpageVues_HorsBots+$row[nb_visite];
183				$NbVisites_HorsBots = $NbVisites_HorsBots+1;
184			}			
185		}
186		//----------------------------------------------
187
188	// -------------------------------------- Affichage -----------------------------------------------------------------------
189	$show_footer = '<div align="center"><a href="http://allmystats.wertronic.com" target="_blank" class="Style1">AllMyStats</a> Powered by <a href="http://www.wertronic.com" target="_blank" class="Style1">Wertronic</a></div><br>';
190	$show_cumul_page = $show_footer;
191/*	
192	if($display_counter) {
193		$show_cumul_page = "Nombre de visiteurs: ".$NbVisites_HorsBots. "<br />""Nombre de pages vues: ".$NbpageVues_HorsBots;
194	}
195*/
196
197################################################################################################################################################################
198		//#############################################################################################
199			// Graphique visiteurs et page visit�es par Jour (todo en fonction car dans car existe aussi dans cumulpage.php, stats_in.php, histomaois.php)
200		//---------------------------------------------------------------------------------------------
201if ($display_graph_by_day) {
202
203		//recup des donn�es
204		$result=mysql_query("select agent, referer, date, code, ip, nb_visite from ".TABLE_VISITEUR." where date like '%$mois' order by code ASC");
205			unset ($val_jour);
206			while($row=mysql_fetch_array($result)){
207				if(!preg_match($AllBots, $row['agent']) && $trash==false) {		
208					$date_comp = $row['date'];
209					$cpt_jour = substr($date_comp,0,2)+0; // + 0 pour faire disparaitre les 0 devant 01, 02, 03 etc (aussi simple qu'une regex)
210					$val_jour[$cpt_jour][0] = $val_jour[$cpt_jour][0] + 1;
211					$val_jour[$cpt_jour][1] = $val_jour[$cpt_jour][1] + $row['nb_visite'];
212
213					$total_nb_visiteurs = $total_nb_visiteurs + 1;
214					$total_nb_pages_visitees = $total_nb_pages_visitees + $row['nb_visite'];
215
216					//Nombre max de pages visit�, pour height graph
217					if($val_jour[$cpt_jour][1]>$max_pages){
218						$max_pages=$val_jour[$cpt_jour][1];
219					}
220					
221					//Pour affichage echelle y
222					if($max_pages!=0){
223						$indice_echelle = bcdiv($val_jour[$cpt_jour][1],$max_pages,2); $hauteur=bcmul($indice_echelle,180.00,2);
224						if ($MaxHauteur_echelle <= $hauteur) { $MaxHauteur_echelle = $hauteur; $EchyMin = '0'; }
225					} else { // pour ne pas afficher 0 si $max_pages = 0
226						$EchyMin  = '';	
227						$max_pages = '';
228					}
229				}
230			}
231			$Nb_jours =  substr($date_comp,0,2);
232
233
234$graph_byday = "";
235
236		//---------- Affichage --------------------------------------------------------------------	
237$graph_byday .= "
238<TABLE align=center CELLPADDING=1 CELLSPACING=0 class=TABLEBORDER>
239  <TBODY>
240  <TR>
241    <TD class=\"TDstatsin\"><!-- Data BEGIN -->
242      <TABLE CELLPADDING=5 CELLSPACING=0 class=TABLEFRAME><!-- header -->
243        <TBODY>
244        <TR>
245          <TH class=TABLETITLE>"
246		  	.$MSG_STAT_GRAF_JOUR_TITRE." (".$MSG_ROBOTS_EXCLUS.") - ".$mois."
247		  </TH>
248          </TR>
249        <TR>
250          <TD colSpan=2 class=\"TDstatsin\"><!-- Rows BEGIN -->
251		  	<small>Total visiteurs = ".$total_nb_visiteurs."<br>
252			Total pages visit�es = ".$total_nb_pages_visitees."</small>
253            <TABLE border=0 CELLPADDING=2 CELLSPACING=0 class=TABLEDATA>
254              <TBODY>
255              <TR>
256          		<td rowspan=\"2\" class=\"TDstatsin\">
257					<B><SPAN class=PAGESVUES>".$MSG_PAGESVISITES."</SPAN><BR>
258					& 
259		  			<SPAN class=VISITES>".$MSG_VISITE."</SPAN></B>
260		  		</TD>";
261
262$graph_byday .= "
263		  	<td nowrap=nowrap valign=\"top\" class=\"TDstatsin\">".$max_pages."</td>
264		  	<td rowspan=\"2\" valign=\"bottom\" class=\"TDstatsin\"><img src=\"".$path_allmystats_abs."images/histo-v_black.gif\" height=\"".$MaxHauteur_echelle."\" width=\"1\" alt=\"\" title=\"\"></td>";
265			
266          for($i=1;$i<=$Nb_jours;$i++){
267				$graph_byday .= "<td rowspan=\"2\" valign=\"bottom\" class=\"TDstatsin\">";
268				if($max_pages!=0) {
269					$indice=bcdiv($val_jour[$i][1],$max_pages,2); $hauteur=bcmul($indice,180.00,2);
270				}
271				$graph_byday .= "<img src=\"".$path_allmystats_abs."images/histo-v.gif\" height=\"".$hauteur."\" width=\"7\" alt=\"".$val_jour[$i][1]."\" title=\"".$val_jour[$i][1]."\">";
272
273				if($max_pages!=0){
274					$indice=bcdiv($val_jour[$i][0],$max_pages,2); $hauteur=bcmul($indice,180.00,2);  
275				}
276				$graph_byday .=  "<img src=\"".$path_allmystats_abs."images/histo-vv.gif\" height=\"".$hauteur."\" width=\"7\" alt=\"".$val_jour[$i][0]."\" title=\"".$val_jour[$i][0]."\"></td>";
277          }
278
279$graph_byday .= "
280		  </TR>
281		  <tr>
282			 <td align=\"right\" valign=\"bottom\" class=\"TDstatsin\">".$EchyMin."</td>
283		  </tr>
284		  
285              <tr>
286                <td class=\"TDstatsin\"><B>". $MSG_GRAF_JOUR."</B></TD>
287
288 	    <td align=center class=\"TDstatsin\">&nbsp;</td><td align=center class=\"TDstatsin\">&nbsp;</td>"; // Pour echelle x
289
290		//----------------- calcul jour du mois et week end pour echelle x ------------------------
291		$jm = explode("/",$mois);
292		$nbjourdumois = maxDaysInMonth($jm[0], $jm[1]);
293		
294		// Premier samedi du mois (6eme jour de la semaine) fonction get_first_day
295		$premiersamedi =  strftime("%d", get_first_day(6, $jm[0], $jm[1])); 
296		$weekend = "/";
297		if ($premiersamedi == 7) { $weekend .= sprintf("%02d",1).'|'; } //Le 1er jour du mois est un dimanche
298		for($i=$premiersamedi;$i<=$nbjourdumois;$i=$i+7){
299			$week = $i;
300			$week = $week+0;
301			$weekend .= sprintf("%02d",$week).'|'; 
302			$weekend .= sprintf("%02d",$week+1) .'|';
303		}
304		$weekend = substr($weekend,0,strlen($weekend)-1); //supp last |
305		$weekend .= "/";
306		//------------------ Affichage echelle x -----------------
307		for($i=1;$i<=$nbjourdumois;$i++){
308			$num=$i;
309			if(!preg_match($weekend, sprintf("%02d",$num))) {	//$num+0 pour supprimer les 0 devant 01, 02 ,03 etc
310		  		$graph_byday .=  "<td align=center class=\"TDstatsin\">". sprintf("%02d", $num)."</td>";
311		  	} else {
312		  		$graph_byday .=  "<td align=center class=\"TDstatsin\"><b><font color=#990000>". sprintf("%02d", $num)."</font></b></td>";
313			}
314		}
315		//---------------------------------------------------------------------------------------
316
317$graph_byday .= "
318</TR></TBODY></TABLE><!-- Rows END --></TD></TR><!-- footer -->
319        <TR>
320		  </TR></TBODY></TABLE><!-- Data END --></TD></TR></TBODY></TABLE><br>";
321 
322		 //echo $graph_byday; //Affichage graph
323		 $show_cumul_page .= $graph_byday;
324		 $graph_byday ="";
325
326} // End if ($display_graph_by_day) {
327
328################################################################################################################################################################
329
330				//-------------------- Affichage tableau keywords -----------------------------
331	if ($display_keywords) {
332		$show_cumul_page .= "
333		<table align=center cellpadding=1 cellspacing=0 class=TABLEBORDER>
334		  <tr>
335			<td class=\"TDstatsin\"><!-- Data BEGIN -->
336			  <table cellpadding=5 cellspacing=0 class=TABLEFRAME><!-- header -->
337				<tr>
338				  <th class=tabletitle>". $MSG_REF_TITRE. ' '. $mois."</th>
339				  </tr>
340				<tr>
341				  <td colSpan=2 class=\"TDstatsin\"><!-- Rows BEGIN -->
342					<table border=1 cellpadding=2 cellspacing=0 class=TABLEDATA>
343					  <tr>
344						<th class=\"THstatsin\">". $MSG_REFERANT."</th>
345						<th class=\"THstatsin\">". $MSG_REF_MOTCLE."</th>
346						<th class=\"THstatsin\">". $MSG_VISITEURS."</th>
347					  </tr>";
348			
349			require "config_moteur.php"; 
350		
351			//-------------------------------------------------------------------------------------------
352			unset($Tab_referer);
353			$result=mysql_query("select * from ".TABLE_VISITEUR." where date like '%$mois' order by referer");
354			$nb_unknow = 0;	
355			while($row=mysql_fetch_array($result)){
356				$referer=parse_url($row[referer]);
357				
358				if(!preg_match($AllBots, $row['agent'])) { // && $trash == false A voir exlus aussi les "bad user agent"
359					//--------------------- extraction mots cl�s -------------
360					$url=parse_url($site);
361					$ref=$referer["host"];
362			
363					if($ref<>$url["host"]){
364						//Pour les adwords l'url est trouv�e car dans visiteur.php est ajout� au referer $Referer = urldecode($Url_syndication[0]). '?googlesyndication=1' ou '&googlesyndication=1';
365						$test_keword[] = array($ref,MotsCles($row[referer],$ref));
366					}
367					//--------------- ext referer et nb visite ---------------
368					if ($row['referer']) { //
369						$Tab_referer[] = $referer['host'];
370					} else { //Visiteurs avec user agent et referer vide modif 31-08-2009
371						$Tab_referer[] = "Unknown or direct";
372						$nb_unknow = $nb_unknow + 1;
373					}
374				}
375			}
376				
377			//Attention array_unique ne garde que les cl�s diff�rentes mais garde la chronologie --> faire usort($Tab_referer, "CompareValeurs"); apr?s
378			$Tab_referer_unique = @array_unique($Tab_referer);
379			@usort($Tab_referer_unique, "CompareValeurs");
380		
381			unset($Tab_aff_ref);
382			
383				for($i=0;$i<count($Tab_referer_unique);$i++){ 
384					$result_agent = mysql_query("select agent from ".TABLE_VISITEUR." where referer like '%".$Tab_referer_unique[$i]."%' and agent NOT REGEXP '".$AllBots."' and date like '%$mois'");
385					$test_agent = mysql_fetch_array($result_agent);
386					//if(!preg_match($AllBots, $test_agent['agent'])) n'est pas n�cessaire mais certainement plus rapide comme �a
387					if(!preg_match($AllBots, $test_agent['agent'])) { // && $trash == false A voir exlus aussi les "bad user agent" modif 31-08-2009
388
389						if (trim($Tab_referer_unique[$i])<>'') {
390							// compte le nombre de visiteurs par referant
391							if ( strstr(trim($Tab_referer_unique[$i]), 'google') ) {
392								$result = mysql_query("select count(*) as somme from ".TABLE_VISITEUR." where referer like '%".$Tab_referer_unique[$i]."%' and agent NOT REGEXP '".$AllBots."' and date like '%$mois'");
393							} else {
394								$result = mysql_query("select count(*) as somme from ".TABLE_VISITEUR." where referer like '%".$Tab_referer_unique[$i]."%' and agent NOT REGEXP '".$AllBots."' and referer not like '%source=web%' and referer not like '%source=hp%' and date like '%$mois'");
395							}
396
397							if (!$result) {
398							   echo 'Impossible d\'ex�cuter la requ?te : ' . mysql_error();
399							   exit;
400							}
401							$row_nb_visites=mysql_fetch_row($result);
402							
403							//------------------------------------------
404							//tab mots cl�/referant
405							for($i2=0;$i2<count($test_keword);$i2++){ 
406								if(strstr($test_keword[$i2][0],$Tab_referer_unique[$i])) {
407										$referer_kew[$i] .= $test_keword[$i2][1].' ';
408								}
409							}
410							//------------------------------------------
411							if ($row_nb_visites[0] == 0){ //si = 0 => referer vide (donc result mysql vide) user agent et referer vide modif 31-08-2009
412								$row_nb_visites[0] = $nb_unknow;
413							}
414
415							$Tab_aff_ref[] = array($row_nb_visites[0], $Tab_referer_unique[$i],$referer_kew[$i]); //dans ce sens car on trie sur nb visites
416						}
417					}
418				}
419				//--------------------------------------------------
420				// Mise en forme mots cl�s googlesyndication et Affichage
421				@array_multisort($Tab_aff_ref,SORT_DESC);
422		
423				for($i=0;$i<count($Tab_aff_ref);$i++){ 
424		
425					$Mots_by_referer =  str_replace('] [', ']+-+[', $Tab_aff_ref[$i][2]);
426					$Mots_by_referer =  str_replace(']  [', ']+-+[', $Mots_by_referer); // car certains comportent 2 espaces --> A voir o? ils sont mis ou supprimmer espaces multiples
427					$Mots_by_referer =  str_replace(']   [', ']+-+[', $Mots_by_referer);// car certains comportent 3 espaces --> A voir o? ils sont mis
428					$Mots_by_referer = strtolower($Mots_by_referer); // Tout en minuscule
429					
430					unset($Tab_motcles);
431					$Tab_motcles = explode('+-+',$Mots_by_referer);
432					for($j=0;$j<count($Tab_motcles);$j++){ 
433						$Tab_motcles[$j] = trim($Tab_motcles[$j]); 
434					}
435					
436					unset($Tab_motcles_unique);
437					$Tab_motcles_unique = array_unique($Tab_motcles);
438					
439					//----------------------
440					unset($tab_keywords);
441					for($j=0;$j<count($Tab_motcles_unique);$j++){ 
442						if (trim($Tab_motcles_unique[$j])) {
443							$tab_keywords[] = array($Tab_motcles_unique[$j], substr_count($Mots_by_referer, $Tab_motcles_unique[$j]));
444						}
445					}
446					
447					// Obtient une liste de colonnes
448					unset($Mot);
449					unset($Nb);
450					if ($tab_keywords) {
451						foreach ($tab_keywords as $key => $row) {
452							$Mot[$key]  = $row[0];
453							$Nb[$key] = $row[1];
454						}
455					}
456					
457					// Trie les donn�es par volume croissant
458					// Ajoute $tab_keywords en tant que dernier param?tre, pour trier par la cl� commune
459					@array_multisort($Nb, SORT_DESC, $tab_keywords);
460					//---------------------------------------------------------------
461		
462					//Affichage
463					$lenmax=35;
464					if (strlen($Tab_aff_ref[$i][1])>$lenmax) {
465						$chaine1=substr($Tab_aff_ref[$i][1], 0, $lenmax);
466						$chaine2=substr($Tab_aff_ref[$i][1], $lenmax);
467						$Tab_aff_ref[$i][1] = $chaine1."<br>".$chaine2;
468					}
469		
470					//-----------------------------
471					//Pour affichage googlesyndication
472						$show_cumul_page .= "<tr><td valign=top class=\"TDstatsin\">".$Tab_aff_ref[$i][1]."</td>
473						<td nowrap class=\"TDstatsin\">"; 
474					
475						if (count($Tab_motcles_unique)>1) {	
476							$show_cumul_page .= "<span> Diff�rents: ". count($Tab_motcles_unique)."</span>";
477						}
478						for($j=0;$j<count($tab_keywords);$j++){ //Affiche les phrases cl�s
479							
480							if (strstr($tab_keywords[$j][0],'googlesyndication=1')) { 
481								$tab_keywords[$j][0] = str_replace('?googlesyndication=1', '<font color=#666666>&nbsp;&nbsp;'.utf8_encode($MSG_ADWORDS_CONTENT_NETWORK).'</font><br>', $tab_keywords[$j][0]);
482								$tab_keywords[$j][0] = str_replace(htmlentities('&googlesyndication=1'), '<font color=#666666>&nbsp;&nbsp;'.utf8_encode($MSG_ADWORDS_CONTENT_NETWORK).'</font><br>', $tab_keywords[$j][0]);//ici il faut htmlentities('&googlesyndication=1'), voir si ne serait pas mieux au niveau de config moteur
483								$tab_keywords[$j][0] = substr(trim($tab_keywords[$j][0]),0,-5); //supp le dernier '<br> '
484							}
485							
486							$show_cumul_page .= "<br><span><font color=#990000>".utf8_decode(urldecode($tab_keywords[$j][0]))."</font></span>";
487						}
488						$show_cumul_page .= "&nbsp;</td>
489						<td nowrap class=\"TDstatsin\">";
490						
491						$show_cumul_page .= "<span> Total: ".$Tab_aff_ref[$i][0]."</span>";
492						for($j=0;$j<count($tab_keywords);$j++){ //affiche le nombre de visite pour chaque mot ou r�f�rant
493								$show_cumul_page .= "<br><span><font color=#990000>".utf8_decode(urldecode($tab_keywords[$j][1]))."</font></span>"; 
494						}
495						$show_cumul_page .= "&nbsp;</td></tr>";
496					//----------------------------
497				}
498				//--------------------------------------------------
499				unset($Tab_referer);
500				unset($Tab_referer_unique);
501				unset($row_nb_visites);
502				unset($Tab_aff_ref);
503	
504		$show_cumul_page .= '
505		</table><!-- Rows END --></td></tr><tr>
506			  </tr><!-- no footer --></table><!-- Data END --></td></tr></table><br>' ;
507			  
508	} // End if ($display_keywords ) {
509	
510			//------------------------ Affichage pages visit�s --------------------------------------------------------
511
512	if ($display_page_view) {		
513
514		if ($mois==""){
515			$mois = date('m/Y',strtotime($UTC." hours", strtotime(date("Y-m-d H:i:s"))));
516		}
517	
518		$result=mysql_query("select * from ".TABLE_VISITEUR." v,".TABLE_PAGE." p where date like '%$mois' and v.code=p.code order by heure");
519		$nb_visite=0;
520		$heure_premier="";
521		while($row=mysql_fetch_array($result)){
522			if($heure_premier==""){
523				$heure_premier=$row[heure];
524			}
525			$nb_visite=$nb_visite+$row[nb_visite]; //Pour calcul %
526			$heure_dernier=$row[heure];
527		}
528		
529		$max_visite=$NbpageVues_HorsBots;
530		
531		$result=mysql_query("select * from ".TABLE_VISITEUR." v,".TABLE_PAGE." p where v.date like '%$mois' and v.code=p.code order by page");
532		$row=mysql_fetch_array($result);
533		$url=$row[page];
534		$nb_url=0;
535		$nb_vis=0;
536		$result=mysql_query("select * from ".TABLE_VISITEUR." v,".TABLE_PAGE." p where v.date like '%$mois' and v.code=p.code order by page");
537	
538		while($row=mysql_fetch_array($result)){
539			$page=$row[page];
540	
541			if(!preg_match($AllBots, $row[agent])) {
542				//---------------------------------------
543					$User_Agent=$row[agent];
544					$trash=false;
545					for($nb_bad_user_agent=0;$nb_bad_user_agent<count($Matrice_bad_user_agent);$nb_bad_user_agent++){
546						if ($Matrice_bad_user_agent[$nb_bad_user_agent][0] == $User_Agent && $Matrice_bad_user_agent[$nb_bad_user_agent][2]=='S') {
547							$trash=true;
548						}
549					}
550				//---------------------------------------
551			}
552	
553			if(!preg_match($AllBots, $row[agent]) && $trash==false) {
554				if($url==$page){
555					$nb_url=$nb_url+$row[nb_visite];
556					$nb_vis++;	
557				} else {
558					$nb=$nb_url*100; 
559					if($max_visite!=0){
560						$pourcent=bcdiv($nb,$max_visite,2);
561					}
562					$page_vue[]= array($url,$nb_vis, $nb_url, $pourcent);
563					$url=$page;
564					$nb_url=$row[nb_visite];
565					$nb_vis=1;
566				}
567			}
568		} // Fin if(!preg_match($AllBots, $row[agent])) {
569	
570			$nb=$nb_url*100; 
571			if($max_visite!=0){
572				$pourcent=bcdiv($nb,$max_visite,2);
573			}
574	
575	$show_cumul_page .= '
576	<table align=center cellpadding=1 cellspacing=0 class=TABLEBORDER>
577	  <tr>
578		<td class="TDstatsin"><!-- Data BEGIN -->
579		  <table cellpadding=5 cellspacing=0 class=TABLEFRAME><!-- header -->
580			<tr>
581			  <th class=tabletitle>'. $MSG_PAGESVISITES.' ('.$MSG_ROBOTS_EXCLUS.')<br>'.$mois.'</th>
582			  </tr>
583	
584			<tr>
585			  <td colSpan=2 class="TDstatsin"><!-- Rows BEGIN -->
586				<table border=1 cellpadding=2 cellspacing=0 class=TABLEDATA>
587					<tr>
588					<th valign="top" align="right" class="THstatsin">'. $MSG_TOTAL.' : <br><br></th>
589					<td valign="top" align="center"class="TDstatsin">'. $NbVisites_HorsBots.'<br></td>
590					<td valign="top" align="center" class="TDstatsin">'. $NbpageVues_HorsBots.'<br></td>
591					<td valign="top" align="center" class="TDstatsin">&nbsp;<br></td>
592					</tr>
593				  <tr>
594					<th class="THstatsin">'.$MSG_PAGE.'</th>
595					<th class="THstatsin">'.$MSG_VISITE.'</th>
596					<th class="THstatsin">'.$MSG_PAGESVISITES.'</th>
597					<th class="THstatsin">'.$MSG_PAGES_POURCENTAGE.'</th></tr>';
598					
599		$page_vue[]= array($url,$nb_vis, $nb_url, $pourcent);
600		@usort($page_vue, "CompareValeurs");
601		$cpt=0;
602		while ($page_vue[$cpt][0]<>""){
603			$show_cumul_page .= "<tr><td class=\"TDstatsin\">".utf8_decode($page_vue[$cpt][0])."</td><td align=center class=\"TDstatsin\">".$page_vue[$cpt][1]."</td><td align=center class=\"TDstatsin\">".$page_vue[$cpt][2]."</td><td align=center class=\"TDstatsin\">".$page_vue[$cpt][3]."%</td></tr>";
604			$cpt++;
605		}
606		 
607		$show_cumul_page .= '
608		</table><!-- Rows END --></td></tr><!-- no footer --></table><!-- Data END --></td></tr></table><BR>
609		';
610	
611	} // End de if ($display_page_view) {	
612	
613		//############################################################################################
614		//------------ Affichage Origine g�ographique des viteurs (hors robots) ----------------------
615	
616	if ($display_org_geo) {
617			$result=mysql_query("select agent, nb_visite ,domaine from ".TABLE_VISITEUR." where date like '%$mois'");
618			while($row=mysql_fetch_array($result)){
619				$Country[] .= $row['domaine'];
620			}
621			$Country = @array_unique($Country);
622			@array_multisort ($Country, SORT_ASC); 
623	
624			//----------------------------------
625			//Important mise ? 0 des variables
626			unset($Tab_country_pages_visiteurs);
627			for($i=0;$i<count($Country);$i++){ //Comment faire autrement
628				$Nb_visites = 'Nb_'.$Country[$i];
629				$$Nb_visites = 0;
630		
631				$Nb_pages_visites = $Country[$i];
632				$$Nb_pages_visites = 0;
633			}
634			//-----------------------------------
635	
636			$result=mysql_query("select * from ".TABLE_VISITEUR." where date like '%$mois'");
637			while($row=mysql_fetch_array($result)){
638				//---------------------------------------
639				$User_Agent=$row[agent];
640				$trash=false;
641				for($nb_bad_user_agent=0;$nb_bad_user_agent<count($Matrice_bad_user_agent);$nb_bad_user_agent++){
642					if ($Matrice_bad_user_agent[$nb_bad_user_agent][0] == $User_Agent && $Matrice_bad_user_agent[$nb_bad_user_agent][2]=='S') {
643						$trash=true;
644					}
645				}
646					//---------------------------------------
647				if(!preg_match($AllBots, $row[agent]) && $trash==false) {
648					for($i=0;$i<count($Country);$i++){
649						if($row[domaine]==$Country[$i]) {
650							$Nb_visites = 'Nb_'.$Country[$i];
651							$$Nb_visites = $$Nb_visites + 1;
652		
653							$Nb_pages_visites = $Country[$i];
654							$$Nb_pages_visites = $$Nb_pages_visites + $row['nb_visite'];
655		
656							$Tab_country_pages_visiteurs[$i] = array($Country[$i],$$Nb_pages_visites,$$Nb_visites);
657						}
658					}
659				}
660			}
661			//--------- Affichage des r�sultats --------------------------
662	
663			@usort($Tab_country_pages_visiteurs,"CompareValeurs");
664			$indice = bcdiv(1,($Tab_country_pages_visiteurs[0][1]/300),2); //proportion en rapport au plus grand nb de pages visit�s
665	
666	$show_cumul_page .= '
667	<table align=center cellpadding=1 cellspacing=0 class=TABLEBORDER>
668	  <tr>
669		<td class=\"TDstatsin\"><!-- Data BEGIN -->
670		  <table align=center cellpadding=5 cellspacing=0 class=TABLEFRAME><!-- header -->
671			<tr>
672			  <th class=tabletitle>'.$MSG_DOMAIN_TITRE.' ('.$MSG_ROBOTS_EXCLUS.')</th>
673			  </tr>
674			<tr>
675			  <td colSpan=2 class=\"TDstatsin\"><!-- Rows BEGIN -->
676				<table border=1 cellpadding=2 cellspacing=0 class=TABLEDATA>
677				  <tr>
678					<th class=\"THstatsin\">'.$MSG_DOMAIN.' ('.count($Tab_country_pages_visiteurs).')</th>
679					<th class=\"THstatsin\">'.$MSG_NB_VISITEURS.'</th>
680					<th class=\"THstatsin\">'.$MSG_PAGESVISITES.'</th>
681				  </tr>
682	';
683	
684			for($i=0;$i<count($Tab_country_pages_visiteurs);$i++){
685				if ($Tab_country_pages_visiteurs[$i][0]=='') { $Tab_country_pages_visiteurs[$i][0] = $MSG_ORIGIN_UNKNOWN;}
686				$show_cumul_page .= "<tr>
687				<td class=\"TDstatsin\"> 
688				<b>".$Tab_country_pages_visiteurs[$i][0]."</b>
689				</td>
690				<td align=\"left\" class=\"TDstatsin\">
691				<img src=\"".$path_allmystats_abs."images/histo-h.gif\" width=\""; 
692				$hauteur=bcmul($Tab_country_pages_visiteurs[$i][2],$indice,2);  
693				$show_cumul_page .= $hauteur .	"\" height=\"8\">".$Tab_country_pages_visiteurs[$i][2].
694				"</td>
695				<td align=\"left\" class=\"TDstatsin\">
696				<img src=\"".$path_allmystats_abs."images/histo-h.gif\" width=\""; 
697				$hauteur=bcmul($Tab_country_pages_visiteurs[$i][1],$indice,2);  
698				$show_cumul_page .= $hauteur."\" height=\"8\">".$Tab_country_pages_visiteurs[$i][1].
699				"</td>";	
700			}
701	
702			$show_cumul_page .= '    
703			</table><!-- Rows END --></td></tr><!-- no footer --></table><!-- Data END --></td></tr></table><br>
704			';
705			
706		} // End if ($display_org_geo) {
707		//--------------------------------------------------------------------------
708		
709		echo $show_cumul_page; // Affichage des tableaux
710		
711		
712		$result=mysql_query("select * from ".TABLE_VISITEUR." where date like '%$mois'");
713		$nbr_result=mysql_num_rows($result);
714	
715	//$AfficheOS=true;
716	//$AfficheNav=true;
717	//$AfficheRobots=true;
718	$dislpay_button_tool_bots = "false"; //Important "false" entre guillemets car affiche le bouton si  $dislpay_button_tool_bots = "";
719		?>
720		<table width="90%" border="0" align="center">
721		  <tr>
722			<td align="center"><?  
723				include_once('tab_os_nav_robots.php'); //Calcul et affichage des tableaux
724				mysql_close(); ?>
725			</td>
726		  </tr>
727		</table>
728		<?
729	
730		message($msg , "");	//efface le message Patientez
731	
732		//--------- Footer -------------------
733	
734		echo $show_footer ;
735		//----------------------------------
736		
737	########################################## Mise en cache du mois encours actuel ######################################################################################	
738	
739			$mois_actuelle = date('m/Y',strtotime($UTC." hours", strtotime(date("Y-m-d H:i:s"))));
740			$mois_Visualise = $mois;
741		
742			$Mois_Annee_visualise = explode("/", $mois_Visualise);
743			$mois_visualise = $Mois_Annee_visualise[0]; // mois
744			$annee_visualise = $Mois_Annee_visualise[1]; //ann�e
745			
746			$Mois_Annee_actuelle = explode("/", $mois_actuelle);
747			$mois_actuelle = $Mois_Annee_actuelle[0];
748			$annee_actuelle = $Mois_Annee_actuelle[1];
749	
750			if ($action_cache_mois_in || isset($archive_encours) ) { //on met en cache
751			
752				if (!is_dir($path_allmystats."cache")) {
753					mkdir ($path_allmystats."cache");
754				}
755
756				//--------------------------------------------------------------------------------------
757				//Ne sert pas pour ici (stats_in) mais est pour l'instant n�cessaire pour les pages mises en cache avec cumulpage.php
758				if (!is_dir($path_allmystats."cache/images")) {
759					mkdir ($path_allmystats."cache/images");
760				}
761				if (!file_exists("cache/images/histo-v_black.gif")) {
762					copy($path_allmystats."images/histo-v_black.gif", $path_allmystats."cache/images/histo-v_black.gif");
763				}
764				if (!file_exists("cache/images/histo-v.gif")) {
765					copy($path_allmystats."images/histo-v.gif", $path_allmystats."cache/images/histo-v.gif");
766				}
767				if (!file_exists("cache/images/histo-vv.gif")) {
768					copy($path_allmystats."images/histo-vv.gif", $path_allmystats."cache/images/histo-vv.gif");
769				}
770				if (!file_exists("cache/images/histo-h.gif")) {
771					copy($path_allmystats."images/histo-h.gif", $path_allmystats."cache/images/histo-h.gif");
772				}
773				//--------------------------------------------------------------------------------------
774
775				$Mois_Annee = explode("/", $mois_Visualise);
776				$format_date_file_name = $Mois_Annee[1].'-'.$Mois_Annee[0];
777				
778				//$Fnm = $path_allmystats."cache/stats_".$site."_".$format_date_file_name."-".$suffixe.".php"; //erreur open_basedir restriction in effect PHP5.2??
779				//$Fnm = "//".$path_allmystats_abs.$site."_".$format_date_file_name."-".$suffixe.".php"; //erreur open_basedir restriction in effect PHP5.2??
780				//$Fnm = "stats/allmystats/cache/stats_".$site."_".$format_date_file_name."-".$suffixe.".php"; //OK si appelle ? partir de la racine
781				//$Fnm = "/stats/allmystats/cache/stats_".$site."_".$format_date_file_name."-".$suffixe.".php";//erreur open_basedir restriction in effect PHP5.2??
782
783				 //---------- Pour contourner le pb open_basedir restriction in effect avec fopen ----------------
784				 $nbSlashes = substr_count($_SERVER['SCRIPT_NAME'], '/'); // on compte le nombre total de slashes contenu dans le lien relatif du fichier courant
785				 $nbSlashes --; // on ne compte pas le slash de la racine (plac� au d�but du lien relatif)
786				 $remontee = ''; // on initialise la remont�e dans l'arborescence
787				 for($i = 0; $i < $nbSlashes; $i++)
788				 {
789					 $remontee .= '../';
790				 }
791				//------------------------------------------------------------------------------------------------
792				//Supprime 1er "/" de $path_allmystats_abs Important si $remontee = ""
793				substr('abcdef', 1);
794				$path_allmystats_rel = substr($path_allmystats_abs, 1);
795				$Fnm = $remontee.$path_allmystats_rel."cache/stats_".$site."_".$format_date_file_name."-".$suffixe.".php";
796
797				if (!$inF = @fopen($Fnm,"w")){
798					echo "Erreur create file<br />";
799				}
800				//$inF = fopen($Fnm,"w");
801
802if ($html_body) {
803	$page_html = 
804	'<?
805	if( ($user_login!=$_SESSION["userlogin"] || $passwd!=$_SESSION["userpass"]) && $public==false)	{
806		echo "<br><br><center><strong>Vous n\'?tes pas autoris� ? visiter cette page</center></strong><br>";
807		exit;
808	}
809	?>
810	
811	<html>
812		<head>
813		<title>AllMyStats - '. $site.' - '.$format_date_file_name.'</title>
814		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
815		<link rel="stylesheet" type="text/css" href="../stylesheet_stats_in.css">
816		</head>
817		<body><table width="100%" border="0" align="center">
818			<tr>
819				<td align="center"><big><strong>Statistiques site: '.$site." - Mois: ".$mois_Visualise.'</strong></big><br><br></td>
820			</tr>
821			<tr>
822				<td align="center">'.$show_cumul_page . $show_page_os_nav_robots.$show_footer.'</td>
823			</tr>
824			</table></body></html>';
825} else {
826	$page_html = 
827	'<?
828	if( ($user_login!=$_SESSION["userlogin"] || $passwd!=$_SESSION["userpass"]) && $public==false)	{
829		echo "<br><br><center><strong>Vous n\'?tes pas autoris� ? visiter cette page</center></strong><br>";
830		exit;
831	}
832	?>
833	
834		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
835		<link rel="stylesheet" type="text/css" href="../stylesheet_stats_in.css">
836		
837		<table width="100%" border="0" align="center">
838			<tr>
839				<td align="center"><big><strong>Statistiques site: '.$site." - Mois: ".$mois_Visualise.'</strong></big><br><br></td>
840			</tr>
841			<tr>
842				<td align="center">'.$show_cumul_page . $show_page_os_nav_robots.$show_footer.'</td>
843			</tr>
844			</table>';
845}
846
847
848
849				if(!@fwrite($inF,$page_html)){
850					echo "Erreur write file<br />";
851				}
852				//fwrite($inF,$page_html);
853
854				if(!@fclose($inF)){
855					echo "Erreur close file";
856				}
857				//fclose($inF); 
858			}
859
860} // End if ($action_cache_mois_in) {
861
862//-------------------------------------------------------------------------------------------
863//#########################################"## Functions ######################################################
864//Il faut la fonction CompareValeurs($val1, $val2) qui ne se trouve normalement seulement dans index_frame.php
865function CompareValeurs($val1, $val2) {
866	if ($val2[1] == $val1[1])
867		return(strcmp($val1[0],$val2[0]));
868	else
869		return($val2[1] - $val1[1]);
870}
871
872function msg_temporaire ($temp_msg) {
873 //ob_flush();
874 flush();
875?> 
876<p align="center" ID="cache"><strong><big><font color="#FF0000"><?php echo $temp_msg;?></font></big></strong></p> 
877<script type="text/javascript">
878 // Le message d'attente est masqu� par d�faut au cas ou java script
879 // serait d�sactiv� sur le navigateur client donc on l'affiche :
880 document.getElementById("cache" ).style.visibility = "visible";
881 </script> 
882<?
883 //ob_flush();
884 flush();
885 }
886 
887function message($msg, $title){
888?> 
889<script type="text/javascript">
890 		document.getElementById("cache" ).style.visibility = "hidden";
891	</script> 
892<?php
893//flush();
894}
895
896//-------------------------------------------------------------------------------------------
897//TODO rep functions car existe aussi dans cumulpage.php, stats_in.php, histomaois.php
898/**
899* Fonction retournant le nombre de jours dans un mois.
900* @param integer $month Mois de 1 ? 12
901* @param integer $year Ann�e
902* @return integer Nombre de jours
903*/
904function maxDaysInMonth($month, $year)
905{
906  $days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
907  return $days;
908}
909
910  /**
911   *
912   *  Gets the first weekday of that month and year
913   *
914   *  @param  int   The day of the week (0 = sunday, 1 = monday ... , 6 = saturday)
915   *  @param  int   The month (if false use the current month)
916   *  @param  int   The year (if false use the current year)
917   *
918   *  @return int   The timestamp of the first day of that month
919   *
920   **/ 
921  function get_first_day($day_number=1, $month=false, $year=false)
922  {
923    $month  = ($month === false) ? strftime("%m"): $month;
924    $year   = ($year === false) ? strftime("%Y"): $year;
925   
926    $first_day = 1 + ((7+$day_number - strftime("%w", mktime(0,0,0,$month, 1, $year)))%7);
927 
928    return mktime(0,0,0,$month, $first_day, $year);
929  }
930
931//##############################################################################################################
932?>
933