Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.21 KB | None | 0 0
  1.  Un dossier fonts/ avec des polices au format .ttf
  2.  Une image captcha.png dans le meme répertoire que captcha.php pour le fond du captcha
  3. Pour utiliser le captcha :
  4.  
  5. dans ton livre d'or tu mets :
  6.  
  7. ---
  8.  
  9. <!-- Notre image créée -->
  10.         <img src="captcha.php" alt="Captcha" id="captcha" />
  11.  
  12.         <!-- (JavaScript) Changer d'image à la volée si elle est illisible  -->
  13.         <a style="cursor:pointer;border-bottom:1px solid black;" onclick="document.images.captcha.src='captcha.php?id='+Math.round(Math.random(0)*1000)+1">Recharger l'image</a>
  14. <p>
  15.             <label for="userCode">Entrez le code que vous voyez sur l'image : &nbsp;&nbsp;</label>
  16.             <input name="userCode" class="textbox" type="text" />
  17.             <input type="submit" name="submit" class="submit" value="Poster" />
  18.  
  19. -----
  20.  
  21. Dans la page de traitement pour poster le message, pour vérifier si le captcha est bon :
  22.  
  23. if (!empty($_REQUEST['userCode']))
  24.     {
  25.         /* Conversion en majuscules */
  26.         $userCode = strtoupper($_REQUEST['userCode']);
  27.         /* Cryptage et comparaison avec la valeur stockée dans $_SESSION['captcha'] */
  28.         if ( md5($userCode) == $_SESSION['captcha'] )
  29.             {
  30.                 // Tu peux poster le message
  31.             }
  32.         else
  33.             {
  34.                 echo 'Le code est incorrect !'; // Le code est erroné
  35.                 return false;
  36.             }
  37.     }
  38. else
  39.     {
  40.     echo 'Vous n'avez pas écrit le code !';
  41.         return false;
  42.     }
  43.  
  44. ---------------
  45.  
  46. captcha.php :
  47.  
  48. <?php
  49. /* ////////////////////
  50.     INITIALISATION
  51. //////////////////// */
  52.  
  53. /* Démarrage d'une session qui va nous permettre de stocker la valeur à recopier. */
  54. session_start(); // session_start() se place toujours avant toute sortie vers la page web
  55.  
  56. /* Chemin absolu vers le dossier */
  57. if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/');
  58.  
  59. /*
  60. Création d'une fonction pour générer la chaîne aléatoire à recopier (sans cryptage) :
  61. - strlen() retourne la taille de la chaine en paramètre
  62. - mt_rand(a, b) génère un nombre aléatoire entre a et b compris : cette fonction est plus rapide que rand() de la bibliothèque standard
  63. - $chars{0} retourne le premier caractère de la chaîne $chars, $chars{1} le deuxième ...
  64. */
  65. function getCode($length) {
  66.     $chars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; // Certains caractères ont été enlevés car ils prêtent à confusion
  67.     $rand_str = '';
  68.     for ($i=0; $i<$length; $i++) {
  69.         $rand_str .= $chars{ mt_rand( 0, strlen($chars)-1 ) };
  70.     }
  71.     return $rand_str;
  72. }
  73.  
  74. /* Stockage de la chaîne aléatoire de 5 caractères obtenue */
  75. $theCode = getCode(4);
  76.  
  77. /* Cryptage de la chaine avec md5() avant de la stocker dans la variable de session $_SESSION['captcha'] de la session en cours.
  78. C'est à cette variable qu'on va comparer le code entré par l'utilsateur dans le formulaire. */
  79. $_SESSION['captcha'] = md5($theCode);
  80.  
  81. /* Afin de traiter les caractères séparément, on les stocke un par un dans des variables. */
  82. $char1 = substr($theCode,0,1);
  83. $char2 = substr($theCode,1,1);
  84. $char3 = substr($theCode,2,1);
  85. $char4 = substr($theCode,3,1);
  86.  
  87. /*
  88. glob() retourne un tableau répertoriant les fichiers du dossier 'fonts', ayant l'extension .ttf ( pas .TTF ! ).
  89. Vous pouvez donc ajouter autant de polices TrueType que vous désirez, en veillant à les renommer.
  90. */
  91. $fonts = glob('fonts/*.ttf');
  92.  
  93. /* //////////////////////////////
  94.     TRAITEMENT DE L'IMAGE
  95. ////////////////////////////// */
  96.  
  97. /*
  98. imagecreatefrompng() crée une nouvelle image à partir d'un fichier PNG.
  99. Cette nouvelle $image va être ensuite modifiée avant l'affichage.
  100.  */
  101. $image = imagecreatefrompng('captcha.png');
  102.  
  103. /*
  104. imagecolorallocate() retourne un identifiant de couleur.
  105. On définit les couleurs RVB qu'on va utiliser pour nos polices et on les stocke dans le tableau $colors[].
  106. Vous pouvez ajouter autant de couleurs que vous voulez.
  107. */
  108. $colors=array ( imagecolorallocate($image, 131,154,255),
  109.                 imagecolorallocate($image, 89,186,255),
  110.                 imagecolorallocate($image, 155,190,214),
  111.                 imagecolorallocate($image, 255,128,234),
  112.                 imagecolorallocate($image, 255,123,123) );
  113.  
  114. /* Création d'une petite fonction qui retourne une VALEUR aléatoire du tableau reçu en paramètre. */
  115. function random($tab) {
  116.     return $tab[array_rand($tab)];
  117. }
  118.  
  119. /*
  120. Mise en forme de chacun des caractères et placement sur l'image.
  121. imagettftext(image, taille police, inclinaison, coordonnée X, coordonnée Y, couleur, police, texte) écrit le texte sur l'image.
  122. */
  123. imagettftext($image, 28, -10, 0, 37, random($colors), ABSPATH .'/'. random($fonts), $char1);
  124. imagettftext($image, 28, 20, 37, 37, random($colors), ABSPATH .'/'. random($fonts), $char2);
  125. imagettftext($image, 28, -35, 55, 37, random($colors), ABSPATH .'/'. random($fonts), $char3);
  126. imagettftext($image, 28, 25, 100, 37, random($colors), ABSPATH .'/'. random($fonts), $char4);
  127.  
  128. /*
  129.     FIN : ENVOI DE L'IMAGE
  130. ////////////////////////////// */
  131.  
  132. /*
  133. Comme c'est le fichier image.php et non captcha.png qui va être appelé,
  134. on envoie un en-tête HTTP au navigateur via header() pour lui indiquer
  135. que image.php est bien une image au format PNG. */
  136. header('Content-Type: image/png');
  137.  
  138. /* .. et on envoie notre image PNG au navigateur. */
  139. imagepng($image);
  140.  
  141. /* L'image ayant été envoyée, on libère toute la mémoire qui lui est associée via imagedestroy(). */
  142. imagedestroy($image);
  143. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement