1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
<?php
session_start();
try
{
// create database
$Db = new PDO('mysql:host=localhost;charset=utf8', 'root', 'qsdfgh');
$db_name = 'ordipolo';
$Db->exec('CREATE DATABASE IF NOT EXISTS ' . $db_name . ';');
unset($Db);
// connexion
$Db = new PDO('mysql:host=localhost;dbname=ordipolo;charset=utf8', 'root', 'qsdfgh');
// create tables
$Db->query('CREATE TABLE IF NOT EXISTS visites (id INT PRIMARY KEY AUTO_INCREMENT, ip VARCHAR(30), hote VARCHAR(255), user_agent TEXT, date DATE, nb_pages INT);');
//$Db->query('CREATE TABLE IF NOT EXISTS compteur (visiteurs INT, bots INT);');
$Db->query('CREATE TABLE IF NOT EXISTS compteur (visiteurs INT);');
// initialiser table compteur avec des 0 si la table est vide
if(!$Db->query('SELECT * FROM compteur')->fetch())
{
$Db->query('INSERT INTO `compteur` VALUES (0);');
}
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
// variables
$ip = $_SERVER['REMOTE_ADDR']; // IP
$hote = gethostbyaddr($ip); // nom d'hôte si possible
date_default_timezone_set ('Europe/Paris'); // configure le décalage horaire sur Europe/Paris
$user = $_SERVER['HTTP_USER_AGENT']; // infos sur le client (navigateur, OS), attention aux menteurs
$user = mb_strtolower($user); // minuscules pour strpos()
$date = date('Y-m-d'); // date formatée
// script recherchant le pays
// la commande whois nécessite le paquet whois (debian) ou bind-tools (archlinux)
// on récupère la ligne (ou les lignes) indiquant le pays avec grep (-i sert à ignorer la casse)
$country = strtolower(shell_exec("whois " . $ip . " | grep -i country | cut -d: -f2 | sed -e ' s/\ //g'"));
function incrementerTableCompteur($Db, $field)
{
$nombre = $Db->query('SELECT ' . $field . ' FROM compteur')->fetch();
if(!$nombre){$nombre = [0];} // tableau d'une seule case
$nombre[0] += 1;
$requete = $Db->prepare('UPDATE compteur SET ' . $field . ' = :nombre');
$requete->execute(array('nombre' => $nombre[0]));
}
// MAJ de la base
if(isset($_SESSION['id_visiteur'])) // pages suivantes
{
// lecture (tester si l'entrée qui l'id transmis existe toujours)
// écriture
$requete = $Db->prepare("UPDATE visites SET nb_pages = nb_pages + 1 WHERE id = :id");
$requete->execute(array(
':id' => $_SESSION['id_visiteur']));
}
else // première page visitée dans la session
{
$requete = $Db->prepare("
INSERT INTO visites (ip, hote, user_agent, date, nb_pages)
VALUES (:ip, :hote, :user_agent, :date, 1)");
// si la visite est déjà enregistrée, ajoute +1 au nombre de pages
$requete->execute(array(
':ip' => $ip,
':hote' => $hote,
':user_agent' => $user,
':date' => $date));
$_SESSION['id_visiteur'] = $Db->lastInsertId();
// compte visiteurs + 1
incrementerTableCompteur($Db, 'visiteurs');
}
echo "visite enregistrée!"; // retour console debug
?>
|