Nous allons créer, ici, le script principal de notre image !

En effet, nous allons, avec quelques lignes, créer une image dynamique et aléatoire.
Pour commencer, créez un fichier nommé
verif_code_gen.php dans un répertoire vierge.
Ensuite, enregistrez dans le même répertoire
cette image, que vous appellerez
fond_verif_img.png (Clic droit >
Enregistrer la cible sous…).
Nous allons tout d'abord ouvrir le fichier verif_code_gen.php, que vous avez normalement créé tout à l'heure.
Il nous faut donc maintenant démarrer la session
avant tout. Nous devrons ensuite créer une image depuis
fond_verif_img.png.
Je vous ajoute en prime dans ce code le header(), pour afficher une image, et la variable $nbr_chiffres, qui contient le nombre de chiffres aléatoires à afficher.
Voici ce début de code :
Code : PHP | <?php
// On crée la session avant tout
session_start();
// On définit la configuration :
$nbr_chiffres = 6; // Nombre de chiffres qui formeront le nombre
// Là, on définit le header de la page pour la transformer en image
header ("Content-type: image/png");
// Là, on crée notre image
$_img = imagecreatefrompng('fond_verif_img.png');
|
Il nous faut aussi définir les couleurs de l'image :
Code : PHP | <?php
// On définit maintenant les couleurs
// Couleur de fond :
$arriere_plan = imagecolorallocate($_img, 0, 0, 0); // Au cas où on n'utiliserait pas d'image de fond, on utilise cette couleur-là.
// Autres couleurs :
$avant_plan = imagecolorallocate($_img, 255, 255, 255); // Couleur des chiffres
?>
|
Maintenant, nous allons ajouter le module de "montage" du nombre aléatoire, qui fonctionne grâce à un array et à un
foreach().
Le nombre généré sera ensuite enregistré dans
$_SESSION['aleat_nbr'].
À la fin de la génération du code, on détruit toutes les variables inutiles avec la fonction
unset().
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | <?php
##### Ici on crée la variable qui contiendra le nombre aléatoire #####
$i = 0;
while($i < $nbr_chiffres) {
$chiffre = mt_rand(0, 9); // On génère le nombre aléatoire
$chiffres[$i] = $chiffre;
$i++;
}
$nombre = null;
// On explore le tableau $chiffres afin d'y afficher toutes les entrées qui s'y trouvent
foreach ($chiffres as $caractere) {
$nombre .= $caractere;
}
##### On a fini de créer le nombre aléatoire, on le rentre maintenant dans une variable de session #####
$_SESSION['aleat_nbr'] = $nombre;
// On détruit les variables inutiles :
unset($chiffre);
unset($i);
unset($caractere);
unset($chiffres);
?>
|
Mais ? Pourquoi s'embêter à faire un monstre pareil pour afficher un nombre aléatoire de 6 chiffres ?
Pourquoi ne pas utiliser tout simplement un mt_rand(0, 999999); ?
Ah oui !

Cette question est souvent posée, mais cette technique a pourtant un but.
En fait, cette méthode n'est pas très fiable. Si le nombre sélectionné est
007865, le code s'affichera comme suit :
7865.
Cela fait donc 2 caractères en moins ! Imaginez que notre mt_rand() sélectionne le nombre 0… Nous nous retrouverions avec un code à 1 caractère… Ça ferait fouillis !
Donc, pour garder le nombre de caractères, nous devons inscrire 6 entrées dans un array, qui contiendront chacune un nombre aléatoire entre 0 et 9. Or, le chiffre 0 est affiché s'il est seul.
Comment va se dépatouiller notre script dans ce cas ?
Pour résumer, dans ce code, PHP va générer ça différemment.
- Je crée l'entrée 0 dans l'array, et je sélectionne aléatoirement un chiffre entre 0 et 9.
- Je crée l'entrée 1 dans l'array, et je sélectionne aléatoirement un chiffre entre 0 et 9.
- Je crée l'entrée 2 dans l'array, et je sélectionne aléatoirement un chiffre entre 0 et 9.
- Je crée l'entrée 3 dans l'array, et je sélectionne aléatoirement un chiffre entre 0 et 9.
- etc.
Tout simplement !

Désormais, notre code affichera
007865 au lieu de
7865.
Pour terminer notre code, nous allons afficher la variable $nombre (qui je vous le rappelle contient le code généré) dans notre image. Ensuite, nous afficherons notre image, comme ceci :
Code : PHP | <?php
imagestring($_img, 5, 18, 8, $nombre, $avant_plan);
imagepng($_img);
?>
|
Et je vous informe désormais que notre script est…
terminé !
Si vous n'avez grillé aucune étape, et bien écouté en classe, vous devriez avoir un script ressemblant à celui-ci :
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
31
32
33
34
35
36
37
38
39
40
41
42 | <?php
// On crée la session avant tout
session_start();
// On définit la configuration :
$nbr_chiffres = 6; // Nombre de chiffres qui formeront le nombre
// Là, on définit le header de la page pour la transformer en image
header ("Content-type: image/png");
// Là, on crée notre image
$_img = imagecreatefrompng('fond_verif_img.png');
// On définit maintenant les couleurs
// Couleur de fond :
$arriere_plan = imagecolorallocate($_img, 0, 0, 0); // Au cas où on n'utiliserait pas d'image de fond, on utilise cette couleur-là.
// Autres couleurs :
$avant_plan = imagecolorallocate($_img, 255, 255, 255); // Couleur des chiffres
##### Ici on crée la variable qui contiendra le nombre aléatoire #####
$i = 0;
while($i < $nbr_chiffres) {
$chiffre = mt_rand(0, 9); // On génère le nombre aléatoire
$chiffres[$i] = $chiffre;
$i++;
}
$nombre = null;
// On explore le tableau $chiffres afin d'y afficher toutes les entrées qui s'y trouvent
foreach ($chiffres as $caractere) {
$nombre .= $caractere;
}
##### On a fini de créer le nombre aléatoire, on le rentre maintenant dans une variable de session #####
$_SESSION['aleat_nbr'] = $nombre;
// On détruit les variables inutiles :
unset($chiffre);
unset($i);
unset($caractere);
unset($chiffres);
imagestring($_img, 5, 18, 8, $nombre, $avant_plan);
imagepng($_img);
?>
|
Ce simple script vous permet de protéger vos formulaires des vilains robots en soif de spam et autres.

Avouez que ça fait peur, non ?
