Comment faire un fichier de logs simple pour votre site ?

J'ai mis en place ce système sur ce site.
A chaque page ouverte quelques infos sont sauvée dans la BdD.
Ce sont : IP, référant, page visitée et un timestamp.
La table s'appelle "t_log" et contient 5 champs.
c_log_id -> id en auto incrémental
c_log_ip -> type texte
c_log_referer -> type texte
c_log_page -> type texte
c_log_timestamp -> timestamp

Il ne nous reste plus qu'à faire un simple INSERT dans cette table

Voici en 2 lignes le code à mettre :
$SQL = "INSERT INTO t_log ( c_log_referer , c_log_ip , c_log_page ) VALUES ( '".$_SERVER['HTTP_REFERER']."' , '".$_SERVER['REMOTE_ADDR']."' , '".$_SERVER['REQUEST_URI']."' )" ;
$SQL_log = mysql_query($SQL) Or die('Erreur '. mysql_error()) ;

On stocke 3 variables de $_SERVER (la liste est disponible sur fr.php.net/reserved.variables)

D'autre part ça ne me sert à rien de stocker mes visites, ça rempli la base pour rien et fausse les statistiques.
Pour cela il suffit d'ajouter un "if" avant d'exécuter la requête :
If (!($_SERVER['REMOTE_ADDR'] == '192.168.0.2' )) {
$SQL = "INSERT INTO t_log ( c_log_referer , c_log_ip , c_log_page ) VALUES ( '".$_SERVER['HTTP_REFERER']."' , '".$_SERVER['REMOTE_ADDR']."' , '".$_SERVER['REQUEST_URI']."' )" ;
$SQL_log = mysql_query($SQL) Or die('Erreur '. mysql_error()) ;
}

J'ai fait le test sur une IP mais on peut aussi le faire depuis un nom de domaine ou encore autre chose.
C'est bien gentil mais comment je fais pour reconnaître ma machine ? J'ai une IP dynamique donc il faudrait que je change le fichier de log à chaque fois...
NON ! En fait c'est une astuce toute bête qui va nous sauver.
J'utilise un dns dynamique (par exemple www.dyndns.org qui est gratuit) qui contient mon IP mise à jour et je fais un reverse IP dessus. Le plus intéressant c'est qu'il y a une fonction PHP qui le fait : gethostbyname()

Donc maintenant notre fichier contient :

$v_ip_cabaud = gethostbyname('cabaud.dyndns.org');

If ($_SERVER['REMOTE_ADDR'] != $v_ip_cabaud ) {
$SQL = "INSERT INTO t_log ( c_log_referer , c_log_ip , c_log_page ) VALUES ( '".$_SERVER['HTTP_REFERER']."' , '".$_SERVER['REMOTE_ADDR']."' , '".$_SERVER['REQUEST_URI']."' )" ;
$SQL_log = mysql_query($SQL) Or die('Erreur '. mysql_error()) ;
}

En faisant $v_ip_cabaud = gethostbyname('cabaud.dyndns.org'); la variable $v_ip_cabaud va donc contenir mon IP actuelle et n'enregistrera pas ma visite.

Voilà.