Mise en place du code « compteur »
Maintenant que votre site est protégé contre le
Directory Traversal, revenons-en à nos moutons. Je vous informe également que nous travaillerons désormais exclusivement dans le fichier
hitcounter.php.
Nous allons commencer par créer deux variables afin de préciser à notre script dans quel répertoire sont stockés les téléchargements et les statistiques.
Code : PHP | <?php
$folder_stat = ’download/stat/’ ; // répertoire dans lequel seront stockées les statistiques
$folder_archive = ’download/’ ; // répertoire des téléchargements
?>
|
Comme je vous l’ai dit plus haut, nous allons transmettre le nom du fichier à télécharger grâce à l’URL, je vous renvoie au cours de M@teo21 pour plus d’informations sur cette technique.
L’URL affichée se présentera comme suit :
Code : Autre1
| http://votresite/hitcounter.php?file=Nom du fichier |
On sait donc désormais que si l’on reçoit la variable
$_GET[’file’], cela veut dire qu’un internaute souhaite télécharger un fichier.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | <?php
if ( isset( $_GET[’file’] ) ) // Si le visiteur veut télécharger un fichier
{
$name = htmlentities($_GET[’file’], ENT_QUOTES); // sécurisation de la variable
if ( file_exists( $folder_stat . $name . ’.txt’ ) ) // si le fichier existe
{
$FileContent = fopen( $folder_stat . $name . ’.txt’, ’r+’ ); // ouverture du fichier statistique contenant le nombre de hits
$hit = fgets( $FileContent ); // récupération de la valeur
$hit = intval( $hit ); // on vérifie qu’il s’agit bien d’un nombre
$hit++; // ajout de 1 au nombre de hits
fseek( $FileContent, 0 ); // réinitialisation du curseur
fputs( $FileContent, $hit ); // écriture dans le fichier
fclose( $FileContent ); // fermeture du fichier
header( "Location: $folder_archive$name.rar" ); // redirection vers le téléchargement
}
}
?>
|
On commence par sécuriser la variable que l’on reçoit. On vérifie ensuite l’existence du fichier de statistiques et on ouvre ce dernier en mode
r+, c’est-à-dire
lecture/écriture et place le curseur au début du fichier. On récupère la valeur contenue dans le fichier de statistiques (on prend soin de vérifier si la valeur est bien un entier, afin de ne pas faire exécuter à notre script des codes malicieux), on ajoute 1 au nombre de
hits et on enregistre la valeur dans le fichier
ad hoc. Pour terminer, on redirige le visiteur vers le fichier qu’il souhaite télécharger.
Pour connaître avec précision les lignes de code auxquelles se réfèrent les explications ci-dessus, consultez les commentaires présents dans le code.
Mine de rien, on vient de terminer le script du compteur en lui-même. Il ne nous reste plus qu’à écrire le script d’affichage.
Mise en place du code « affichage »
Récupération du nombre de hits
Afin de simplifier l’opération de récupération du nombre de
hits, nous allons créer une fonction qui va nous permettre non seulement de récupérer le nombre de
hits inhérents au fichier que l’on propose en téléchargement mais aussi qui va se charger de créer le fichier de statistiques s’il n’existe pas.
Code : PHP 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 | <?php
function NumberOfHit( $name ) // création de la fonction NumberOfHit
{
$folder_stat = ’download/stat/’ ; // répertoire dans lequel seront stockées les statistiques
$file = $folder_stat . $name . ’.txt’ ; // nom du fichier de statistiques contenant le nombre de hits
if ( file_exists( $file ) ) // si le fichier existe
{
$FileContent = fopen( $file , ’r’ ); // ouverture du fichier
$hit = fgets( $FileContent ); // récupération de la valeur
fclose( $FileContent ); // fermeture du fichier
return $hit; // retour de la valeur de $hit
}
else // si le fichier n’existe pas
{
touch( $file ); // création du fichier
$FileContent = fopen( $file , ’r+’ ); // ouverture du fichier
fseek( $FileContent, 0 ); // réinitialisation du curseur
fputs( $FileContent, 0 ); // écriture dans le fichier
fclose( $FileContent ); // fermeture du fichier
}
}
?>
|
On commence par vérifier l’existence du fichier de statistiques. S’il existe, on l’ouvre en mode
r, c’est-à-dire
lecture seule et place le curseur au début du fichier, on récupère la valeur (et on l’attribue à la variable
$hit). Si le fichier de statistiques n’existe pas, on le crée, on l’ouvre en mode
r+, c’est-à-dire
lecture/écriture et place le curseur au début du fichier, on enregistre la valeur « 0 » dans ce dernier et on le ferme.
Pour connaître avec précision les lignes de code auxquelles se réfèrent les explications ci-dessus, consultez les commentaires présents dans le code.
Affichage des téléchargements
Il ne nous reste plus qu’à afficher les liens vers les téléchargements mais
surtout le nombre de
hits (cela fait quand même 15 min que l’on bosse dessus

). Pour chaque téléchargement, il vous faudra insérer le code suivant :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | <?php
$name = ’Fruity Loop 6.2’ ; // nom du fichier (et de l’archive)
$result = NumberOfHit( $name ) ; // récupération du nombre de hits pour le nom concerné
echo ’
<h3>’ . $name . ’</h3>
<p>
Télécharger le fichier : <a href="?file=’ . $name . ’">Direct download</a><br/>
Nombre de hits : ’ . $result . ’
</p>
’;
?>
|
On commence par déclarer la variable
$name correspondant au titre du fichier. Dans notre cas, le fichier à télécharger s’appelle
Fruity Loop 6.2.
Le titre du fichier doit être le même que le nom de l’archive (moins l’extension).
On récupère le nombre de
hits grâce à la fonction créée précédemment et on attribue la valeur à la variable
$result. Pour finir, on affiche le tout.
Voilà notre script entièrement terminé. Les ultimes précisions sont dans la partie suivante.
