Fichiers log, stats, traces du passage des visiteurs sur un site

2/5 (12 avis)

Snippet vu 11 618 fois - Téléchargée 31 fois

Contenu du snippet

Ce petit bout de code permet a un webmaster de connaitre les ips de ses visiteurs, les pages qu'ils visitent et s'il y a une zone membre, cela permet de connaitre le pseudo du visiteur. Le code est fait pour phpBB, mais il peut être adapté à la sauce de n'importe quel site en modifiant seulement les noms des variables.

Source / Exemple :


// On définit un nom de fichier texte en fonction de la date en cours
$filename = date('d-m-Y') . '.txt';
// On définit un nom de dossier en fontion de la date
$folder = date('M-Y');

// si besoin, on créé un dossier avec portant le nom du mois et de l'année en cours 
$path = $phpbb_root_path . 'logs/' . $folder . '/';
!is_dir($path) ? @mkdir($path) : '';

// On ouvre le fichier ou l'on va écrire les données
$fp = fopen($path . $filename, 'a');
fseek($fp, 0);

// Chaine de formattage de la date, changez-la si vous la trouvez trop longue ou pas à votre gout ;)
$date_str = 'D d M Y H:i:s T(O)';

// Utile seulement si une zone membre existe
$username_str = (isset($userdata['username']) ? $userdata['username'] : '-');

// on fait en sorte que les informations importantes soient formattées comme dans un tableau
// cette partie n'est pas indispensable
$export = sprintf('[%30s] %15s %25s - %20s - Agent: %s'."\n",
               date($date_str),
               $_SERVER['REMOTE_ADDR'],
               $username_str,
               $_SERVER['PHP_SELF'],
               $_SERVER['HTTP_USER_AGENT']);

// on écrit dans le fichier texte
fputs($fp, $export);
fclose($fp);

Conclusion :


Pas de grosse difficulté au niveau de la complexité du code :)

pour phpBB:
placer le code dans le fichier ./includes/page_header.php, dans les dernières lignes du fichier, juste avant:

$template->pparse('overall_header');

A voir également

Ajouter un commentaire Commentaires
Pierrot_421 Messages postés 5 Date d'inscription jeudi 3 août 2006 Statut Membre Dernière intervention 5 novembre 2006
5 nov. 2006 à 13:47
Petite prcision : j'ai meme tenté par un include
include ('log.php');
mais rien à faire ,kif-kif, blocage de la fonction de la messaegie privé --> le dossier n'existe pas !!
Pierrot_421 Messages postés 5 Date d'inscription jeudi 3 août 2006 Statut Membre Dernière intervention 5 novembre 2006
5 nov. 2006 à 13:44
beeeeennnn !!!! Moi quand je met le code dans la page includ/page_header.php, ça me bloque l'accès à la messagerie privé, quand on clique sur le lien des M.P, au lieu d'afficher les dossiers de la messagier, ça met : ce dossier n'existe pas
J'ai essayé de coller ce code en plein plein d'endroits différents de la page header.php, mais rien à faire, ça me bloqsue la visualisation des dossers des M.P (my version oh PhpBb est la dernière en date)
Merci de toutes infos, parce que je l'aimais bien, moi, ce petit script :( :( ;)
HelpeurDotCom Messages postés 3 Date d'inscription vendredi 11 novembre 2005 Statut Membre Dernière intervention 27 novembre 2005
27 nov. 2005 à 19:10
Ayé c'est tout bonnement im-pé-cable !!!
Merci pour tout je vais le recommander chaudement autour de moi ;)
gergalp Messages postés 70 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 mars 2007
27 nov. 2005 à 18:06
pour le parse error, c'est corrigé, pour le reste.... ce n'est que du détail: pour la chaine de formattage de la date, c'est une question de quantités d'informations contenues; cacun a des demandes différentes. Pour afficher l'URL complète, il te suffit de remplacer le $_SERVER['PHP_SELF'] par $_SERVER['REQUEST_URI'], c'est tout.
HelpeurDotCom Messages postés 3 Date d'inscription vendredi 11 novembre 2005 Statut Membre Dernière intervention 27 novembre 2005
27 nov. 2005 à 13:41
Heu... Oui et non !

Je m'explique le pseudo est bien inscrit dans le fichier log sans
souci par contre il reste deux petits soucis :

-1- l'url complète n'est toujours pas prise en compte (comme je le signalais avant il ne mentionne que le fichier source sans les variables ?=blabla ou l'url rewriting en html)

-2-tout se marque sur la même ligne sans aucun séparateur comme précédemment (|) ce qui est très gênant pour l'interprétation surtout quand il y a plus de 50 personnes d'inscrites dans ce log.

Le principe est superbe, le résultat obtenu pas mal du tout, il reste à paufiner.

(Désolé j'aurai bien aidé mais je débute en php)

Je me suis permis de modifier un poil la source pour obtenir un affichage comme désiré :

// Chaine de formattage de la date, changez-la si vous la trouvez trop longue ou pas à votre gout ;)
$date_str = 'd M Y à H:i:s T(O)';

// Utile seulement si une zone membre existe
$username_str = ($userdata['username'] ? $userdata['username'] : 'Visiteur');

..car la valeur précédente du $username_str provoquait un parse error.

Merci encore ;)
Afficher les 12 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.