codeigniter
CAPTCHA Helper
Recherche…
Chargement de cette aide
Cet assistant est chargé à l'aide du code suivant:
Dans le contrôleur lui-même (* peut répéter encore et encore *)
$this->load->helper('captcha');
Dans config/autoload.php
( charge une seule fois )
$autoload['helper'] = array('captcha');
create_captcha ($ data)
Prend un tableau d'informations pour générer CAPTCHA en entrée et crée l'image selon vos spécifications, renvoyant un tableau de données associatives sur l'image.
[array]
(
'image' => IMAGE TAG
'time' => TIMESTAMP (in microtime)
'word' => CAPTCHA WORD
)
L'image est la balise d'image réelle:
<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
Le "time" est le micro timestamp utilisé comme nom de l'image sans l'extension de fichier. Ce sera un numéro comme celui-ci: 1139612155.3422
Le "mot" est le mot qui apparaît dans l'image captcha, qui, si elle n'est pas fournie à la fonction, sera une chaîne aléatoire.
Utilisation de l'aide CAPTCHA
Une fois chargé, vous pouvez générer un captcha comme ceci:
$vals = array(
'word' => 'Random word',
'img_path' => './captcha/',
'img_url' => 'http://example.com/captcha/',
'font_path' => './path/to/fonts/texb.ttf',
'img_width' => '150',
'img_height' => 30,
'expiration' => 7200
);
$cap = create_captcha($vals);
echo $cap['image'];
- La fonction captcha nécessite la bibliothèque d'images GD.
- Seuls les
img_path
etimg_url
sont requis. - Si un "mot" n'est pas fourni, la fonction générera une chaîne ASCII aléatoire. Vous pouvez créer votre propre bibliothèque de mots que vous pouvez dessiner au hasard.
- Si vous ne spécifiez pas de chemin vers une police TRUE TYPE, la police GD native sera utilisée. Le dossier "captcha" doit être accessible en écriture (666 ou 777)
- L'expiration (en secondes) indique combien de temps une image restera dans le dossier captcha avant d'être supprimée. La valeur par défaut est deux heures.
Exemple complet
Voici un exemple d'utilisation avec une base de données. Sur la page où le CAPTCHA sera affiché, vous aurez quelque chose comme ceci:
$this->load->helper('captcha');
$vals = array(
'img_path' => './captcha/',
'img_url' => 'http://example.com/captcha/'
);
$cap = create_captcha($vals);
$data = array(
'captcha_time' => $cap['time'],
'ip_address' => $this->input->ip_address(),
'word' => $cap['word']
);
$query = $this->db->insert_string('captcha', $data);
$this->db->query($query);
echo 'Submit the word you see below:';
echo $cap['image'];
echo '<input type="text" name="captcha" value="" />';
Ensuite, sur la page qui accepte la soumission, vous aurez quelque chose comme ceci:
// First, delete old captchas
$expiration = time()-7200; // Two hour limit
$this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration);
// Then see if a captcha exists:
$sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time > ?";
$binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);
$query = $this->db->query($sql, $binds);
$row = $query->row();
if ($row->count == 0)
{
echo "You must submit the word that appears in the image";
}