Un grand problème aujourd'hui est un spam. La meilleure façon de lutter contre le spam est Captcha. Captcha fait la différence entre un ordinateur et un être humain. Ordinateurs ne peuvent pas lire le texte dans une image, ce qui est la raison pour laquelle nous allons utiliser une photo aussi.
Commençons par créer le fichier captcha.php. Ce fichier va créer une photo avec un texte écrit sur elle
header ("Content-Type: image /jpeg);.
//Une image JPEG sera délivré $ width = 60; //Largeur de l'image $ height = 24; //Taille de l'image $ mon_image = imagecreatetruecolor (largeur de $, hauteur); //Créer l'image TrueColor imagefill (mon_image $, 0, 0, 0xFFFFFF); //Fond blanc
Jusqu'à présent, nous avons réussi à créer une image qui a un fond blanc, de 60 pixels de large et 24 pixels de haut.
Ajoutons quelques distorsions:
for ($ c = 0; $ c $ x = rand (0, $ width-1); $ y = rand (0, $ height-1); imagesetpixel ($ mon_image , $ x, $ y, 0x000000);}
Nous inséré 40 pixels noirs dans l'image Ces pixels auront différentes coordonates chaque fois une image est chargé
Écrivons le texte.. la photo:..
$ x = rand (1,10); //X coordonate du coin supérieur gauche $ y = rand (1,10); //Y coordonate du coin supérieur gauche $ rand_string = rand (10000,99999); //Obtenir un nombre compris entre 10000 et 99999 imagestring (mon_image $, 5, $ x, $ y, $ rand_string, 0x000000); //Ecrire le nombre obtenu plus tôt sur la photo
Sauvons la chaîne écrite sur l'image dans un cookie. Nous allons lire ce cookie fois un formulaire est soumis à comparer les données.
setcookie («cookie-captcha", (md5 ($ rand_string)) , le temps () + 3600, "/"); imagejpeg (mon_image $); //Création de la imagedestroy d'image jpeg (mon_image $); //Supprimer l'image jpeg
Dans cet exemple, le nom du cookie est biscuits -captcha, son contenu sera le md5 valeur codée de la chaîne aléatoire obtenu plus tôt (le nombre écrit dans l'image), il sera valable pour une heure sur l'ensemble de votre domaine.
L'image est supprimée (imagedestroy ) pour économiser de l'espace sur le serveur
Le dossier complet de captcha.
php sera:
header ("Content-Type: image /jpeg. '); $ width = 60; $ height = 24; $ mon_image = imagecreatetruecolor ($ width, $ height); imagefill ($ mon_image, 0, 0, 0xFFFFFF); for ($ c = 0; $ c $ x = rand (0, $ width-1); $ y = rand (0, $ height-1); imagesetpixel (mon_image $, $ x, $ y, 0x000000);} $ x = rand (1,10); $ y = rand (1,10); $ rand_string = rand (10000,99999); imagestring (mon_image $, 5, $ x, $ y, $ rand_string, 0x000000); setcookie («cookie-captcha", (md5 ($ rand_string)), le temps () + 3600, "/"); imagejpeg (mon_image $); imagedestroy (mon_image $);?>