15

track

track
SYNOPSIS

track($request_uri=false, $track_agent=false)

DESCRIPTION
CODE
  1. require_once 'clientipaddress.php';
  2. require_once 'validateipaddress.php';
  3. require_once 'requesturi.php';
  4. require_once 'useragent.php';
  5. require_once 'validateuseragent.php';

Charge les fonctions client_ip_address, validate_ip_address, request_uri, user_agent et validate_user_agent.

  1. function track($request_uri=false, $track_agent=false) {
  2.     global $track_log, $track_db;
  3.     global $track_agent_blacklist;
  4.  
  5.     if (! ($track_log or $track_db) ) {
  6.         return true;
  7.     }
  8.  
  9.     if (!$request_uri) {
  10.         $request_uri=request_uri();
  11.     }
  12.  
  13.     if (!$request_uri) {
  14.         return false;
  15.     }

track sort immédiatement si les variables globales $track_log et $track_db sont false. Si le paramètre $request_uri n'est pas défini, track l'initialise en appelant la fonction request_uri. Si $request_uri n'est toujours pas défini, track sort.

  1.     $user_agent=false;
  2.  
  3.     if ($track_agent or $track_agent_blacklist) {
  4.         $user_agent=user_agent();
  5.         if (!validate_user_agent($user_agent)) {
  6.             $user_agent=false;
  7.         }
  8.  
  9.         if ($user_agent and $track_agent_blacklist) {
  10.             $reg = '/' . implode('|', $track_agent_blacklist) . '/i';
  11.  
  12.             if (preg_match($reg, $user_agent)) {
  13.                 return true;
  14.             }
  15.         }
  16.     }

Si le paramètre $track_agent vaut true ou si le paramètre $track_agent_blacklist est défini, la variable $user_agent est initialisée en appelant la fonction user_agent et validée.

Si $user_agent est défini et si sa valeur correspond à une des signatures listées dans $track_agent_blacklist, track sort.

  1.     $r = true;
  2.  
  3.     if ($track_log) {
  4.         require_once 'log.php';
  5.  
  6.         $logmsg = $request_uri;
  7.         if ($user_agent) {
  8.             $logmsg .= "\t" . $user_agent;
  9.         }
  10.  
  11.         $r = write_log($track_log === true ? 'track.log' : $track_log, $logmsg);
  12.  
  13.         if (!$r) {
  14.             return false;
  15.         }
  16.     }

Si la variable globale $track_log vaut true, track charge le code de la fonction write_log et lui demande de journaliser la requête et éventuellement l'agent dans le fichier dont le nom est défini par $track_log ou appelé track.log par défaut.

  1.     if ($track_db) {
  2.         $ip_address=client_ip_address();
  3.  
  4.         if (!validate_ip_address($ip_address)) {
  5.             return false;
  6.         }
  7.  
  8.         $sqlipaddress=db_sql_arg($ip_address, false);
  9.         $sqlrequesturi=db_sql_arg($request_uri, true);
  10.         $sqluseragent=db_sql_arg($user_agent, true, true);
  11.  
  12.         $tabtrack=db_prefix_table($track_db === true ? 'track' : $track_db);
  13.  
  14.         $sql="INSERT INTO $tabtrack (ip_address, request_uri, user_agent) VALUES (INET_ATON($sqlipaddress), $sqlrequesturi, $sqluseragent)";
  15.  
  16.         $r = db_insert($sql);
  17.  
  18.         if (!$r) {
  19.             return false;
  20.         }
  21.     }
  22.  
  23.     return true;
  24. }

Si la variable globale $track_db vaut true, track récupère l'adresse IP du client et la valide puis prépare et exécute un ordre SQL qui enregistre les paramètres de la requête dans la table dont le nom est défini par $track_db ou appelée track par défaut.

UTILISATION

Pour afficher le contenu du journal des connexions :

$ tail track.log

Pour obtenir le nombre total de visiteurs :

$ cut -f 1 track.log | cut -d' ' -f 3 | sort | uniq | wc -l

Pour lister les 10 pages les plus consultées :

$ cut -f 2 track.log | sort | uniq -c | sort -rn | head -10

Pour vérifier la BD :

mysql> SELECT * FROM track;

NOTE : Si nécessaire, ajoutez le préfixe $db_prefix défini dans db.inc au nom de la table track.

Pour obtenir le nombre total de visiteurs :

mysql> SELECT COUNT(DISTINCT ip_address) from track;

Pour lister les 10 pages les plus consultées :

mysql> SELECT request_uri, COUNT(request_uri) AS count from track GROUP BY request_uri ORDER BY count DESC LIMIT 10;

IMPORTANT : La quantité de données générées peut rapidement remplir la BD et le journal. Optez pour un seul mode en mettant $track_db ou $track_log à false. Une fois une campagne d'analyse du type des clients du site (navigateurs, mobiles, robots, etc.) terminée, laissez le paramètre $track_agent à false.

VOIR AUSSI

engine, log, requesturi, useragent, validateuseragent, clientipaddress, validateipaddress

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].