PageRenderTime 53ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 0ms

/spip/ecrire/public/stats.php

https://github.com/eyeswebcrea/espace-couture-sittler.fr
PHP | 92 lines | 52 code | 16 blank | 24 comment | 21 complexity | a5f46052278715c593303204f6cf8df3 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-3.0
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2011 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) return;
  12. // http://doc.spip.org/@public_stats_dist
  13. function public_stats_dist() {
  14. // $_SERVER["HTTP_REFERER"] ne fonctionne pas partout
  15. if (isset($_SERVER['HTTP_REFERER'])) $referer = $_SERVER['HTTP_REFERER'];
  16. else if (isset($GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"])) $referer = $GLOBALS["HTTP_SERVER_VARS"]["HTTP_REFERER"];
  17. // Rejet des robots (qui sont pourtant des humains comme les autres)
  18. if (_IS_BOT) return;
  19. // Ne pas tenir compte des tentatives de spam des forums
  20. if ($_SERVER['REQUEST_METHOD'] !== 'GET'
  21. OR $_GET['page'] == 'forum')
  22. return;
  23. // rejet des pages 404
  24. if (isset($GLOBALS['page']['status'])
  25. AND $GLOBALS['page']['status'] == 404)
  26. return;
  27. // Identification du client
  28. $client_id = substr(md5(
  29. $GLOBALS['ip'] . $_SERVER['HTTP_USER_AGENT']
  30. // . $_SERVER['HTTP_ACCEPT'] # HTTP_ACCEPT peut etre present ou non selon que l'on est dans la requete initiale, ou dans les hits associes
  31. . $_SERVER['HTTP_ACCEPT_LANGUAGE']
  32. . $_SERVER['HTTP_ACCEPT_ENCODING']
  33. ), 0,10);
  34. // Analyse du referer
  35. $log_referer = '';
  36. if (isset($referer)) {
  37. $url_site_spip = preg_replace(',/$,', '',
  38. preg_replace(',^(https?://)?(www\.)?,i', '',
  39. url_de_base()));
  40. if (!(($url_site_spip<>'')
  41. AND strpos('-'.strtolower($referer), strtolower($url_site_spip))
  42. AND strpos($referer,"recherche=")===false)) {
  43. $log_referer =$referer;
  44. }
  45. }
  46. //
  47. // stockage sous forme de fichier ecrire/data/stats/client_id
  48. //
  49. // 1. Chercher s'il existe deja une session pour ce numero IP.
  50. $content = array();
  51. $fichier = sous_repertoire(_DIR_TMP, 'visites') . $client_id;
  52. if (lire_fichier($fichier, $content))
  53. $content = @unserialize($content);
  54. // 2. Plafonner le nombre de hits pris en compte pour un IP (robots etc.)
  55. // et ecrire la session
  56. if (count($content) < 200) {
  57. // Identification de l'element
  58. if (isset($GLOBALS['contexte']['id_article']))
  59. $log_type = "article";
  60. else if (isset($GLOBALS['contexte']['id_breve']))
  61. $log_type = "breve";
  62. else if (isset($GLOBALS['contexte']['id_rubrique']))
  63. $log_type = "rubrique";
  64. else
  65. $log_type = "";
  66. if ($log_type)
  67. $log_type .= "\t" . intval($GLOBALS['contexte']["id_$log_type"]);
  68. else $log_type = "autre\t0";
  69. $log_type .= "\t" . trim($log_referer);
  70. if (isset($content[$log_type]))
  71. $content[$log_type]++;
  72. else $content[$log_type] = 1; // bienvenue au club
  73. ecrire_fichier($fichier, serialize($content));
  74. }
  75. }
  76. ?>