codeigniter
CAPTCHA ayudante
Buscar..
Cargando este Ayudante
Este ayudante se carga utilizando el siguiente código:
En el propio controlador (* se puede repetir una y otra vez *)
$this->load->helper('captcha');
En config/autoload.php
( cargar solo una vez )
$autoload['helper'] = array('captcha');
create_captcha ($ data)
Toma una matriz de información para generar el CAPTCHA como entrada y crea la imagen según sus especificaciones, devolviendo una matriz de datos asociativos sobre la imagen.
[array]
(
'image' => IMAGE TAG
'time' => TIMESTAMP (in microtime)
'word' => CAPTCHA WORD
)
La "imagen" es la etiqueta de imagen real:
<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
El "tiempo" es la marca de tiempo micro utilizada como nombre de la imagen sin la extensión de archivo. Será un número como este: 1139612155.3422
La "palabra" es la palabra que aparece en la imagen captcha, que si no se proporciona a la función, será una cadena aleatoria.
Usando el ayudante de CAPTCHA
Una vez cargado puedes generar un captcha como este:
$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 función captcha requiere la librería de imágenes GD.
- Solo se requieren
img_path
eimg_url
. - Si no se proporciona una "palabra", la función generará una cadena ASCII aleatoria. Puede armar su propia biblioteca de palabras de la que puede dibujar al azar.
- Si no especifica una ruta de acceso a una fuente TRUE TYPE, se utilizará la fuente GD feo nativa. La carpeta "captcha" debe ser de escritura (666 o 777)
- La "caducidad" (en segundos) significa cuánto tiempo permanecerá una imagen en la carpeta captcha antes de que se elimine. El valor predeterminado es dos horas.
Ejemplo completo
Aquí hay un ejemplo de uso con una base de datos. En la página donde se mostrará el CAPTCHA tendrá algo como esto:
$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="" />';
Luego, en la página que acepta el envío tendrás algo como esto:
// 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";
}