Normalement, votre hébergeur, surtout s'il est payant, doit vous permettre d'accéder aux fichiers ".log" qui enregistrent tout ce qui se passe sur votre site... Des prestataires gratuits d'analyse de fréquentation du site existent aussi (je vous recommande Xiti). Mais comment faire lorsque l'on a des besoins particuliers...
... (synthèse automatique périodique à envoyer au client, suivi de fréquentation des visiteurs enregistrés, analyses diverses des hits, des référents, des langues, etc...). Le plus simple peut être d'enregistrer soi-même les infos pertinentes et de les analyser ensuite avec quelques scripts... afin d'obtenir quelque chose comme ça !
_stats.asp
<% ' STOCKAGE DES INFOS DU HIT Set FSO=Server.CreateObject("Scripting.FileSystemObject") ' nom du fichier = n° de semaine Fnm = datediff("ww","01/01/70",now) & ".txt" ' infos concernant le hit chaine = now & "|" _ & request.ServerVariables("REMOTE_ADDR") & "|" _ & request.ServerVariables("HTTP_ACCEPT_LANGUAGE") _ & "|" & request.ServerVariables("SCRIPT_NAME") ' s'il y a une query on la stocke aussi query = request.ServerVariables("QUERY_STRING") if query<>"" then chaine = chaine & "?" & query : end if ' si le référent n'est pas du site on le stocke ' sinon on sauve seulement "site" refert = request.ServerVariables("HTTP_REFERER") serveur = request.ServerVariables("SERVER_NAME") if inStr(refert,"://" & serveur & "/") then refert = "site" end if chaine = chaine & "|" & refert & "|" ' simplification du navigateur navigt = request.ServerVariables("HTTP_USER_AGENT") if inStr(navigt,"MSIE 4") then navigt = "MSIE 4" elseif inStr(navigt,"MSIE 5") then navigt = "MSIE 5" elseif inStr(navigt,"MSIE 5.5") then navigt = "MSIE 5.5" elseif inStr(navigt,"Netscape6") then navigt = "Netscape 6" elseif instr(navigt,"Mozilla") then navigt = left(navigt,11) else navigt = left(navigt,50) : end if chaine = chaine & navigt & "|" ' marqueurt perso eventuel chaine = chaine & marqueurt ' ecriture dans le fichier set inF = FSO.openTextFile(dirstat & "\" & site & Fnm,8,true) inF.writeLine(chaine) inF.close %>
_stats.php
<? // STOCKAGE DES INFOS DU HIT // nom du fichier = n° de semaine $Fnm = strval(floor(time()/(3600*24*7))).".txt"; // infos concernant le hit $chaine = date("d/m/Y H:i:s")."|"; // date $chaine .= getenv("REMOTE_ADDR")."|"; // IP visiteur $chaine .= getenv("HTTP_ACCEPT_LANGUAGE")."|"; $chaine .= $PHP_SELF; // Page visitée // s'il y a une query on la stocke aussi if(getenv("QUERY_STRING")) $chaine .= "?".getenv("QUERY_STRING"); // si le référent n'est pas du site on le stocke // sinon on sauve seulement "site" $refert = getenv("HTTP_REFERER"); // Référent if(strpos($refert,"://".getenv("SERVER_NAME")."/")) $refert = "site"; $chaine .= "|".$refert."|"; // simplification du navigateur $navigt = getenv("HTTP_USER_AGENT"); if(strpos($navigt,"MSIE 4")) $navigt = "MSIE 4"; elseif(strpos($navigt,"MSIE 5")) $navigt = "MSIE 5"; elseif(strpos($navigt,"MSIE 5.5")) $navigt = "MSIE 5.5"; elseif(strpos($navigt,"Netscape6")) $navigt = "Netscape 6"; elseif(strpos($navigt,"Mozilla")) $navigt = substr($navigt,0,11); else $navigt = substr($navigt,0,50); $chaine .= $navigt."|"; // marqueur perso eventuel $chaine .= $marqueurt; // ecriture dans le fichier $inF = fopen($dirstat."/".$site.$Fnm,"a"); fputs($inF,$chaine."\n"); fclose($inF); ?>
Remarques
Inclure la page "_stats" via SSI sur toutes les pages concernées :
<% ' Répertoire déprotégé dans lequel écrire les fichiers dirstat = server.MapPath("/rep_deprotege") ' Nom du site pour distinguer plusieurs fichiers stats site = "mon_site" %> ' Marqueur éventuel marqueurt = request.cookies("email") %> <!-- #include file="_stats.asp" -->
<? // Répertoire dans lequel écrire les fichiers $dirstat = "mon_rep"; // Nom du site pour distinguer plusieurs fichiers stats $site = "mon_site"; // Marqueur éventuel (cookie ?) $marqueurt = $email; include("_stats.php"); ?>
Vous pouvez éventuellement vérifier le bon fonctionnement de l'ensemble sur une page privée, en attendant, de la manière suivante :
<pre> <% Set FSO=Server.CreateObject("Scripting.FileSystemObject") dirstat = server.MapPath("/rep_deprotege") site = "mon_site" Fnm = datediff("ww","01/01/70",now) & ".txt" set inF = FSO.openTextFile(dirstat & "\" & site & Fnm,1,false) Response.write inF.readAll inF.close %> </pre>
Un fichier nouveau est créé chaque semaine (paramètre "ww" en ASP ou 7 en PHP) afin de pouvoir le rapatrier régulièrement du serveur et récupérer ainsi de l'espace (pour info, le fichier stat hebdo de ce site a une taille de plusieurs Mo !)... afin aussi de permettre des analyses on-line plus rapides (semaine en cours) ainsi que des analyses off-line complètes comme nous le verrons par la suite...
Si votre site a beaucoup de passages, vous pouvez modifier ce paramètre en mettant par exemple "d" en ASP ou 1 en PHP, créant ainsi un fichier nouveau chaque jour...
Comme d'habitude, avec le Système de Fichiers, pour pouvoir écrire, il faut en ASP qu'un dossier ait été déprotégé en écriture (voir l'admin de l'hébergeur), et en PHP que des droits d'écriture soient donnés (CHMOD ou via le logiciel FTP)
On peut aussi améliorer cette analyse en excluant, comme c'est le cas sur ce site, le(s) WebMaster(s) en leur posant un cookie dont la valeur sera testée avant d'enregistrer, ou non, le hit...