Exemple

L'exemple qui suit implémente l'utilisation commune d'un CAPTCHA: Soumettre un formulaire de donnée qui ne sera pris en compte que si le CAPTCHA a correctement été résolu.

Créer un CAPTCHA

Le code qui suit crée un CAPTCHA, provides the relevant information for the package, anhd retrieves the CAPTCHA as a PNG image.

<?php
require_once 'Text/CAPTCHA.php';

// Fixons les options du CAPTCHA  (la fonte doit exister!)
$imageOptions = array(
    
'font_size'        => 24,
    
'font_path'        => './',
    
'font_file'        => 'COUR.TTF',
    
'text_color'       => '#DDFF99',
    
'lines_color'      => '#CCEEDD',
    
'background_color' => '#555555'
);

$options = array(
    
'width' => 200,
    
'height' => 80,
    
'output' => 'png',
    
'imageOptions' => $imageOptions
);

// Générer un nouvel objet Text_CAPTCHA, pour le pilote Image
$c Text_CAPTCHA::factory('Image');
$retval $c->init($options);
if (
PEAR::isError($retval)) {
    
printf ('Erreur pendant la génération du CAPTCHA: %s',
            
$retval->getMessage());
    exit;
}

// Récupérer la  phrase secrete du CAPTCHA
$_SESSION['phrase'] = $c->getPhrase();

// Prendre l'image CAPTCHA (PNG)
$png $c->getCAPTCHAAsPNG();
if (
PEAR::isError($png)) {
    echo 
'Erreur pendant la génération du CAPTCHA!';
    echo 
$retval->getMessage();
    exit;
}
file_put_contents(md5(session_id()) . '.png'$png);
?>

Protéger un formulaire avec un CAPTCHA

Le code suivant implémente la fonctionnalité de vérification qu'un CAPTCHA a été correctement ou pas résolu. Pour cela, la phrase du CAPTCHA est stockée dans une variable de session pour conserver la l'information à comparer. Il est important de vider (unset) la session après résolution du CAPTCHA pour éviter une réutilisation de l'ID de session.

<?php
session_start
();
$ok false;
$msg 'Veuillez introduire dans le champs ci dessous '
.      'le texte qui apparait dans l\'image!';
if (
$_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset(
$_POST['phrase']) && is_string($_POST['phrase']) && isset($_SESSION['phrase']) &&
        
strlen($_POST['phrase']) > && strlen($_SESSION['phrase']) > &&
        
$_POST['phrase'] == $_SESSION['phrase']) {
        
$msg 'OK!';
        
$ok true;
        unset(
$_SESSION['phrase']);
    } else {
        
$msg 'Veuillez ré-essayer!';
    }
    
unlink(md5(session_id()) . '.png');
}
print 
"<p>$msg</p>";

if (!
$ok) {
    
// Crée le CAPTCHA comme vu ci-dessus
    // et l'envoyer au client
}
?>

Regardez le fichier CAPTCHA_test.php dans le paquet distribué pour un exemple complet et fonctionnel (support GD et TTF requis).