PageRenderTime 101ms CodeModel.GetById 36ms RepoModel.GetById 0ms app.codeStats 6ms

/modules/visitstat/referant.php

https://bitbucket.org/meianki/voguersurlavague
PHP | 354 lines | 238 code | 40 blank | 76 comment | 34 complexity | ddd63536222c6eb17c5c65cc711832ec MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0
  1. <?
  2. /*
  3. -------------------------------------------------------------------------
  4. AllMyStats V1.39 - 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. */
  16. //-----------------------------------------------------------------------------
  17. //Mise en en forme ($AllBots) pour preg_match des bots connus (dans la table + bot en générale (bot, spider , etc)
  18. $result1=mysql_query("select bot_name, org_name, crawler_url, crawler_info from ".TABLE_CRAWLER."");
  19. if (!$result1) { //ex: si la table n'existe pas
  20. echo 'Impossible d\'exécuter la requ?te : ' . mysql_error();
  21. exit;
  22. }
  23. $AllBots = '/Bot|Slurp|Scooter|Spider|crawl|';
  24. while($row=mysql_fetch_array($result1)){
  25. $Form_chaine = str_replace('/','\/',$row['bot_name']);
  26. $Form_chaine = str_replace('+','\+',$Form_chaine);
  27. $Form_chaine = str_replace('(','\(',$Form_chaine);
  28. $Form_chaine = str_replace(')','\)',$Form_chaine);
  29. $AllBots .= $Form_chaine.'|';
  30. }
  31. $AllBots = substr($AllBots,0,strlen($AllBots)-1); //del last |
  32. $AllBots .= '/i';
  33. //-------------------- Mise en tableau de la table bad user agent - FAUT il refaire ou mettre en funct --------
  34. unset($Matrice_bad_user_agent); //Important car si vient de normal.php double tout
  35. $Bad_User_Agent=mysql_query("select * from ".TABLE_BAD_USER_AGENT.""); //
  36. while($bad_agents=mysql_fetch_array($Bad_User_Agent)){ // Mise en tableau des bad agents
  37. $Matrice_bad_user_agent[] = array($bad_agents['user_agent'], $bad_agents['info'],$bad_agents['type']);
  38. }
  39. //-------------------------------------------------------------------------------------------------------------
  40. ?>
  41. <TABLE CELLPADDING=1 CELLSPACING=0 class=TABLEBORDER>
  42. <TBODY>
  43. <TR>
  44. <TD><!-- Data BEGIN -->
  45. <TABLE CELLPADDING=5 CELLSPACING=0 class=TABLEFRAME><!-- header -->
  46. <TBODY>
  47. <TR>
  48. <TH class=TABLETITLE><?
  49. echo $MSG_REF_TITRE;
  50. if($display_best_referer) {
  51. echo ' - '.$when;
  52. }
  53. ?></TH>
  54. </TR>
  55. <TR>
  56. <TD colSpan=2><!-- Rows BEGIN -->
  57. <TABLE border=1 CELLPADDING=2 CELLSPACING=0 class=TABLEDATA>
  58. <TBODY>
  59. <TR>
  60. <TH><? echo $MSG_REFERANT; ?></TH>
  61. <TH><? echo $MSG_REF_MOTCLE; ?></TH>
  62. <TH><? echo $MSG_VISITEURS; ?></TH>
  63. </TR>
  64. <?
  65. require "config_moteur.php";
  66. //-------------------------------------------------------------------------------------------
  67. unset($Tab_referer);
  68. $result = mysql_query("select * from ".TABLE_VISITEUR." where date='$when' order by referer");
  69. $nb_unknow = 0;
  70. while($row = mysql_fetch_array($result)){
  71. $referer = parse_url($row['referer']);
  72. if(!preg_match($AllBots, $row['agent'])) { // && $trash == false A voir exlus aussi les "bad user agent"
  73. /*
  74. //En test pour afficher la position en face des mots clés -----------------
  75. $start="";
  76. $cd="";
  77. $referer = parse_url($row['referer']);
  78. //$host = parse_url($test_agent['referer']);
  79. $query = $referer["query"];
  80. parse_str($query);
  81. echo $row['referer']."<br>";
  82. if (strstr($referer["host"],'google') && strstr($row['referer'],'source=web')) {
  83. echo "Google Position = ".$cd."<br>";
  84. } elseif ( strstr($referer["host"],'google') && !strstr($row['referer'],'source=web') && $start ) {
  85. echo "Google page start = ".$start."<br>";
  86. } elseif ( strstr($referer["host"],'google') && !strstr($row['referer'],'source=web') && !$start ) {
  87. echo "Google 1ere page<br>";
  88. }
  89. //------------------------------------------------------------------------------
  90. */
  91. //--------------------- extraction mots clés -------------
  92. $url = parse_url($site);
  93. $ref = $referer["host"];
  94. if($ref<>$url["host"]){
  95. //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';
  96. $test_keword[] = array($ref,MotsCles($row['referer'],$ref));
  97. }
  98. //--------------------------------------------------------
  99. //--------------- ext referer et nb visite ---------------
  100. if ($row['referer']) { //
  101. $Tab_referer[] = $referer['host'];
  102. } else { //Visiteurs avec user agent et referer vide modif 31-08-2009
  103. $Tab_referer[] = "Unknown or direct";
  104. $nb_unknow = $nb_unknow + 1;
  105. }
  106. }
  107. }
  108. //Attention array_unique ne garde que les clés différentes mais garde la chronologie --> faire usort($Tab_referer, "CompareValeurs"); apr?s
  109. $Tab_referer_unique = @array_unique($Tab_referer);
  110. @usort($Tab_referer_unique, "CompareValeurs");
  111. unset($Tab_aff_ref);
  112. //Il faut compter le nombre de visites mais pas si user agent est un bot
  113. for($i=0;$i<count($Tab_referer_unique);$i++){
  114. $result_agent = mysql_query("select agent, referer from ".TABLE_VISITEUR." where referer like '%".$Tab_referer_unique[$i]."%' and agent NOT REGEXP '".$AllBots."' and date like '%$when'");
  115. $test_agent = mysql_fetch_array($result_agent);
  116. //Plus necessaire si utilisation de and agent NOT REGEXP '".$AllBots."' if(!preg_match($AllBots, $test_agent['agent'])) n'est pas nécessaire mais certainement plus rapide comme ça
  117. if(!preg_match($AllBots, $test_agent['agent'])) { // && $trash == false A voir exlus aussi les "bad user agent" modif 31-08-2009
  118. if (trim($Tab_referer_unique[$i])<>'') {
  119. //NOTE google est en plein bricolage 31-08-2009
  120. //as_q au lieu de q pour les keyword
  121. //Leur nouveau format /url?sa ... source= etc.. avec en plus quelques fois le host du FAI de l'internaute dans la ligne dont la longueur n'en finit plus
  122. //donc certain mots clés sortes des 255 caract?res du champs mysql (était ? 200 --> le passer ? 255 ou m?me 512)
  123. //C'est pour ça que de temps en temps le total mots clé ne correspond pas
  124. if ( strstr(trim($Tab_referer_unique[$i]), 'google') ) {
  125. $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 '%$when'");
  126. } else {
  127. $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 '%$when'");
  128. }
  129. if (!$result) {
  130. echo 'Impossible d\'exécuter la requ?te : ' . mysql_error();
  131. exit;
  132. }
  133. $row_nb_visites = mysql_fetch_row($result);
  134. //------------------------------------------
  135. //tab mots clé/referant
  136. for($i2=0;$i2<count($test_keword);$i2++){
  137. if(strstr($test_keword[$i2][0],$Tab_referer_unique[$i])) {
  138. $referer_kew[$i] .= $test_keword[$i2][1].' ';
  139. }
  140. }
  141. //------------------------------------------
  142. if ($row_nb_visites[0] == 0){ //si = 0 => referer vide (donc result mysql vide) user agent et referer vide modif 31-08-2009
  143. $row_nb_visites[0] = $nb_unknow;
  144. }
  145. $Tab_aff_ref[] = array($row_nb_visites[0], $Tab_referer_unique[$i],$referer_kew[$i]); //dans ce sens car on trie sur nb visites
  146. }
  147. }
  148. }
  149. //--------------------------------------------------
  150. // Mise en forme mots clés googlesyndication et Affichage
  151. @array_multisort($Tab_aff_ref,SORT_DESC);
  152. for($i=0;$i<count($Tab_aff_ref);$i++){
  153. //echo $Tab_aff_ref[$i][2]."<br><br>";
  154. $Mots_by_referer = str_replace('] [', ']+-+[', $Tab_aff_ref[$i][2]);
  155. $Mots_by_referer = str_replace('] [', ']+-+[', $Mots_by_referer); // car certains comportent 2 espaces --> A voir o? ils sont mis ou supprimmer espaces multiples
  156. $Mots_by_referer = str_replace('] [', ']+-+[', $Mots_by_referer);// car certains comportent 3 espaces --> A voir o? ils sont mis
  157. $Mots_by_referer = $Mots_by_referer; //On met en minuscule dans config_moteur.php
  158. //echo $Mots_by_referer."<br><br>";
  159. unset($Tab_motcles);
  160. $Tab_motcles = explode('+-+',$Mots_by_referer);
  161. for($j=0;$j<count($Tab_motcles);$j++){
  162. $Tab_motcles[$j] = trim($Tab_motcles[$j]); // trim trés important pour array_unique apr?s str_replace
  163. //echo $Tab_motcles[$j]."<br>";
  164. }
  165. unset($Tab_motcles_unique);
  166. $Tab_motcles_unique = array_unique($Tab_motcles);
  167. //print_r($Tab_motcles_unique);
  168. //----------------------
  169. unset($tab_keywords);
  170. for($j=0;$j<=count($Tab_motcles_unique);$j++){ //= sinon n'affiche pas le dernier mot en cours
  171. if (trim($Tab_motcles_unique[$j])) {
  172. $tab_keywords[] = array($Tab_motcles_unique[$j], substr_count($Mots_by_referer, $Tab_motcles_unique[$j]));
  173. }
  174. }
  175. // Obtient une liste de colonnes
  176. unset($Mot);
  177. unset($Nb);
  178. if ($tab_keywords) {
  179. foreach ($tab_keywords as $key => $row) {
  180. $Mot[$key] = $row[0];
  181. $Nb[$key] = $row[1];
  182. }
  183. }
  184. // Trie les données par volume croissant
  185. // Ajoute $tab_keywords en tant que dernier param?tre, pour trier par la clé commune
  186. @array_multisort($Nb, SORT_DESC, $tab_keywords);
  187. //---------------------------------------------------------------
  188. //Affichage
  189. $lenmax=35;
  190. if (strlen($Tab_aff_ref[$i][1])>$lenmax) {
  191. $chaine1=substr($Tab_aff_ref[$i][1], 0, $lenmax);
  192. $chaine2=substr($Tab_aff_ref[$i][1], $lenmax);
  193. $Tab_aff_ref[$i][1] = $chaine1."<br>".$chaine2;
  194. }
  195. //-----------------------------
  196. //Pour affichage googlesyndication
  197. echo "<tr><td valign=top>".$Tab_aff_ref[$i][1]."</td>
  198. <td nowrap>"; //Référant
  199. if (count($Tab_motcles_unique)>1) {
  200. echo "<span> Différents: ". count($Tab_motcles_unique)."</span>";
  201. }
  202. for($j=0;$j<count($tab_keywords);$j++){ //Affiche les phrases clés
  203. if (strstr($tab_keywords[$j][0],'googlesyndication=1')) {
  204. $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]);
  205. $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
  206. $tab_keywords[$j][0] = substr(trim($tab_keywords[$j][0]),0,-5); //supp le dernier '<br> '
  207. }
  208. echo "<br><span><font color=#990000>".trim(utf8_decode(urldecode($tab_keywords[$j][0])))."</font></span>";
  209. }
  210. echo "&nbsp;</td>
  211. <td nowrap>";
  212. echo "<span> Total: ".$Tab_aff_ref[$i][0]."</span>";
  213. for($j=0;$j<count($tab_keywords);$j++){ //affiche le nombre de visite pour chaque mot ou référant
  214. echo "<br><span><font color=#990000>".utf8_decode(urldecode($tab_keywords[$j][1]))."</font></span>";
  215. }
  216. echo "&nbsp;</td></tr>";
  217. //----------------------------
  218. }
  219. unset($Tab_referer);
  220. unset($Tab_referer_unique);
  221. unset($row_nb_visites);
  222. unset($Tab_aff_ref);
  223. //--------------------------------------------------------------------------------
  224. ?>
  225. </TBODY></TABLE><!-- Rows END --></TD></TR><TR>
  226. <?
  227. if($display_best_referer) {
  228. ?>
  229. <TH colSpan=2><SPAN class=TABLEHREF>
  230. <form name="form1" method="post" action="<?PHP_SELF;?>">
  231. <input name="when" type="hidden" value="<? echo $when; ?>">
  232. <input class="submit" name="detail_ref" type="submit" value="<? echo $MSG_RETOUR; ?>" alt="<? echo $MSG_RETOUR; ?>" >
  233. </form></SPAN></TH>
  234. <?
  235. }
  236. ?>
  237. </TR><!-- no footer --></TBODY></TABLE><!-- Data END --></TD></TR></TBODY></TABLE><BR>
  238. <?
  239. ##################################### Affichage meilleurs référants ###########################################################
  240. if($display_best_referer) {
  241. ?>
  242. <TABLE CELLPADDING=1 CELLSPACING=0 class=TABLEBORDER>
  243. <TBODY>
  244. <TR>
  245. <TD><!-- Data BEGIN -->
  246. <TABLE CELLPADDING=5 CELLSPACING=0 class=TABLEFRAME><!-- header -->
  247. <TBODY>
  248. <TR>
  249. <TH class=TABLETITLE><? echo $MSG_REF_CUMUL; ?></TH>
  250. </TR>
  251. <TR>
  252. <TD colSpan=2><!-- Rows BEGIN -->
  253. <TABLE border=1 CELLPADDING=2 CELLSPACING=0 class=TABLEDATA>
  254. <TBODY>
  255. <TR>
  256. <TH><? echo $MSG_REFERANT; ?></TH>
  257. <TH><? echo $MSG_VISITEURS; ?></TH>
  258. </TR>
  259. <?
  260. unset($Tab_referer);
  261. $date=explode("/",$when);
  262. $result=mysql_query("select * from ".TABLE_VISITEUR." where date like '%/".$date[1]."/".$date[2]."' order by referer");
  263. while($row=mysql_fetch_array($result)){
  264. $referer=parse_url($row[referer]);
  265. if ($row[referer]) {
  266. $Tab_referer[] = $referer[host];
  267. }
  268. }
  269. //Attention array_unique ne garde que les clés différentes mais garde la chronologie --> faire usort($Tab_referer, "CompareValeurs"); apr?s
  270. $Tab_referer_unique = @array_unique($Tab_referer);
  271. @usort($Tab_referer_unique, "CompareValeurs");
  272. for($i=0;$i<count($Tab_referer_unique);$i++){
  273. if (trim($Tab_referer_unique[$i])<>'') {
  274. $result=mysql_query("select count(*) as somme from ".TABLE_VISITEUR." where referer like '%".$Tab_referer_unique[$i]."%' and date like '%/".$date[1]."/".$date[2]."'");
  275. if (!$result) {
  276. echo 'Impossible d\'exécuter la requ?te : ' . mysql_error();
  277. exit;
  278. }
  279. $row_nb_visites=mysql_fetch_row($result);
  280. $Tab_aff_ref[] = array($row_nb_visites[0], $Tab_referer_unique[$i]); //dans ce sens car on trie sur nb visites
  281. }
  282. }
  283. unset($Tab_referer);
  284. unset($Tab_referer_unique);
  285. unset($row_nb_visites);
  286. //------------------------------------------------
  287. //Affichage du total adwords googlesyndication pour le mois
  288. $resultgooglesyndication=mysql_query("select count(*) as somme from ".TABLE_VISITEUR." where referer like '%googlesyndication%' and date like '%/".$date[1]."/".$date[2]."'");
  289. $row_nb_googlesyndication=mysql_fetch_row($resultgooglesyndication);
  290. if($row_nb_googlesyndication[0]) {
  291. echo "<tr><td>Total Adwords réseau de contenu</td><td>".$row_nb_googlesyndication[0]."</td></tr>";
  292. }
  293. //------------------------------------------------
  294. //Affichage
  295. @array_multisort($Tab_aff_ref,SORT_DESC);
  296. for($i=0;$i<count($Tab_aff_ref);$i++){
  297. echo "<tr><td>".$Tab_aff_ref[$i][1]."</td><td>".$Tab_aff_ref[$i][0]."</td></tr>";
  298. }
  299. unset($Tab_aff_ref);
  300. ?>
  301. </TBODY></TABLE><!-- Rows END --></TD></TR><TR>
  302. <TH colSpan=2><SPAN class=TABLEHREF>
  303. <form name="form1" method="post" action="<?PHP_SELF;?>">
  304. <input name="when" type="hidden" value="<? echo $when; ?>">
  305. <input class="submit" name="detail_ref" type="submit" value="<? echo $MSG_RETOUR; ?>" alt="<? echo $MSG_RETOUR; ?>" >
  306. </form>
  307. </SPAN></TH></TR>
  308. </TBODY></TABLE><!-- Rows END --></TD></TR><!-- no footer --></TBODY></TABLE><!-- Data END -->
  309. <?
  310. } // end if($display_best_referer) {
  311. ?>
  312. </TD></TR></TBODY></TABLE>