track
track
SYNOPSIS
track($request_uri=false, $track_agent=false)
DESCRIPTION
CODE
- require_once 'clientipaddress.php';
- require_once 'validateipaddress.php';
- require_once 'requesturi.php';
- require_once 'useragent.php';
- require_once 'validateuseragent.php';
Charge les fonctions client_ip_address
, validate_ip_address
, request_uri
, user_agent
et validate_user_agent
.
- function track($request_uri=false, $track_agent=false) {
- global $track_log, $track_db;
- global $track_agent_blacklist;
- if (! ($track_log or $track_db) ) {
- return true;
- }
- if (!$request_uri) {
- $request_uri=request_uri();
- }
- if (!$request_uri) {
- return false;
- }
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.
- $user_agent=false;
- if ($track_agent or $track_agent_blacklist) {
- $user_agent=user_agent();
- if (!validate_user_agent($user_agent)) {
- $user_agent=false;
- }
- if ($user_agent and $track_agent_blacklist) {
- $reg = '/' . implode('|', $track_agent_blacklist) . '/i';
- if (preg_match($reg, $user_agent)) {
- return true;
- }
- }
- }
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.
- $r = true;
- if ($track_log) {
- require_once 'log.php';
- $logmsg = $request_uri;
- if ($user_agent) {
- $logmsg .= "\t" . $user_agent;
- }
- $r = write_log($track_log === true ? 'track.log' : $track_log, $logmsg);
- if (!$r) {
- return false;
- }
- }
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.
- if ($track_db) {
- $ip_address=client_ip_address();
- if (!validate_ip_address($ip_address)) {
- return false;
- }
- $sqlipaddress=db_sql_arg($ip_address, false);
- $sqlrequesturi=db_sql_arg($request_uri, true);
- $sqluseragent=db_sql_arg($user_agent, true, true);
- $tabtrack=db_prefix_table($track_db === true ? 'track' : $track_db);
- $sql="INSERT INTO $tabtrack (ip_address, request_uri, user_agent) VALUES (INET_ATON($sqlipaddress), $sqlrequesturi, $sqluseragent)";
- $r = db_insert($sql);
- if (!$r) {
- return false;
- }
- }
- return true;
- }
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