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).

Introduction (Previous) Information about the CAPTCHA and inner workings (Next)
Last updated: Sun, 29 Aug 2010 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

Note by: fusco
This example uses md5 encryption for unlink() image. Note that the captcha_test.php uses SHA1.

The previous comment suggests using /usr/share/fonts as the default font location. An easier solution maybe to upload the TTF to your web root.

For shared servers, this may be helpful to include PEAR extensions. To define another include directory:

ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . '/file/path/to/files/');

Setting the width and height parameters for the image tag is best for most browsers [img src='' width=200 height=80]
Note by: alan_k
On a standard Unix system, this would be a better initializer (as the font location is more likely to be correct)

$retval = $c->init(array(
'width' => 200,
'height' => 80,
'output' => 'png',
'imageOptions' => array(
'font_size' => 24,
'font_path' => '/usr/share/fonts/truetype/msttcorefonts/',
'font_file' => 'Arial.ttf',
'text_color' => '#DDFF99',
'lines_color' => '#CCEEDD',
'background_color' => '#555555'
)
));