7.PHP pour le web

7.4.Captcha (anti robot) pour formulaire

7.4.3.Paramétrage du captcha

Nous avons jusque là affiché un captcha avec tous les paramètres par défaut mais la méthode init() permet de configurer plus finement son rendu, moyennant le passage d'un tableau en paramètre.
Ce tableau doit être un tableau associatif contenant les clés suivantes (toutes les clés sont optionnelles):
  • width pour préciser la largeur (en pixels) de l'image
  • height pour préciser la hauteur (en pixels) de l'image
  • imageOptions pour définir les paramètres "avancés" de l'image via un tableau associatif contenant les clés (optionnelles):
    • font_file nom du fichier de police de caractères
    • font_path chemin vers le fichier de police de caractères
    • font_size la taille de police à utiliser
    • text_color la couleur du texte (au format #RRGGBB)
    • background_color la couleur du fond (au format #RRGGBB)
    • line_color la couleur des lignes qui altèrent le texte (au format #RRGGBB)
Voici donc un exemple de personnalisation
<?php
require_once('include_path_inc.php');
require_once('Text/CAPTCHA.php');

$options = array(
    'width' => 200,
    'height' => 80,
    'imageOptions' => array(
        'font_file'        => 'DejaVuSans.ttf',
        //'font_path'        => '.',
        'font_size'        => 15,
        'text_color'       => '#0000FF',
        'background_color' => '#00FF00',
        'lines_color'      => '#FF0000'
     )
);

// Instanciation d'un objet Text_CAPTCHA de type Image
$captcha = Text_CAPTCHA::factory('Image');

// Initialisation
$err = $captcha->init($options);
if (PEAR::isError($err)) {
    die("Erreur d'initialisation du CAPTCHA:".$err->getMessage());
}

// Recuperation de l'image au format PNG
$png = $captcha->getCAPTCHAAsPNG();
if (PEAR::isError($png)) {
    die("Impossible de creer l'image".$png->getMessage());
}

// "Affichage" de l'image
header("Content-Type: image/png");
echo $png;
?>
qui donne
rem
  • La bibliothèque PEAR Text_CAPTCHA ne fonctionne pas avec PHP 7.0 et plus
  • La police DejaVu.ttf peut être téléchargée en suivant ce lien [DejaVu.ttf] (fichier dejavu-fonts-ttf-2.28.zip)
  • En pratique, il conviendra de choisir des couleurs offrant un contraste bien plus faible.