Des captchas avec PEAR
Posté le Tuesday 13 March 2012 | Catégories : PHP
Le package PEAR Text_CAPTCHA permet, comme son nom l'indique, de créer des captchas (Completely Automated Public Turing test to tell Computers and Humans Apart), voir la page Captcha sur wikipedia pour d'autres d'exemples.
Le package nécessite l'installation du package Image_Text. Il est encore au stade Alpha, il faut donc utiliser l'option -f (ou --force) pour l'installer :
sudo pear install -f Text_CAPTCHA
sudo pear install -f Image_Text
Pour l'utiliser, il suffit de créer un formulaire, avec une image dont la source sera un script php (captcha.php dans l'exemple ci-dessous).
<form method="post">
<img src="captcha.php" /><br/>
<input type="text" name="phrase" />
<input type="submit" />
</ form>
Le script se charge de créer l'image, de l'envoyer au navigateur, et de stocker la phrase dans la session. Attention, il est nécessaire d'indiquer un fichier TTF (TrueType Font), par exemple LinLibertine, que l'on peut télécharger gratuitement sur .
<?php
session_start();
require_once 'Text/CAPTCHA.php';
// La police de caractère à utiliser
$imageOptions = array(
'font_size' => 24,
'font_path' => './',
'font_file' => 'LinLibertine_R.ttf',
'antialias' => true
);
// Options de l'image
$options = array(
'width' => 200,
'height' => 80,
'output' => 'png',
'imageOptions' => $imageOptions
);
// Créer l'image
$c = Text_CAPTCHA::factory('Image');
$c->init($options);
// Enregistrer la phrase dans la session
$_SESSION['phrase'] = $c->getPhrase();
// Envoyer l'image au navigateur
header("Content-Type: image/png");
header("Content-Transfer-Encoding: binary");
echo $c->getCAPTCHA();
Il ne reste plus qu'à vérifier que la phrase entrée dans le formulaire est correcte:
<?php
session_start();
if (
isset($_POST['phrase'])
&& isset($_SESSION['phrase'])
&& $_POST['phrase'] == $_SESSION['phrase']) {
echo "<p>Correct!</p>";
}
Les autres options sont naturellement expliquées sur le site du projet PEAR.