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']) > 0 && strlen($_SESSION['phrase']) > 0 &&
$_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).