codeigniter
Pomocnik CAPTCHA
Szukaj…
Ładowanie tego pomocnika
Ten pomocnik jest ładowany przy użyciu następującego kodu:
W samym kontrolerze (* można powtarzać raz po raz *)
$this->load->helper('captcha');
W config/autoload.php
( Załaduj tylko raz )
$autoload['helper'] = array('captcha');
create_captcha ($ data)
Pobiera na wejściu tablicę informacji, aby wygenerować CAPTCHA i tworzy obraz zgodnie ze specyfikacjami, zwracając tablicę asocjacyjnych danych o obrazie.
[array]
(
'image' => IMAGE TAG
'time' => TIMESTAMP (in microtime)
'word' => CAPTCHA WORD
)
„Obraz” jest faktycznym znacznikiem obrazu:
<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
„Czas” to mikro-znacznik czasu używany jako nazwa obrazu bez rozszerzenia pliku. Będzie to taka liczba: 1139612155.3422
„Słowo” to słowo pojawiające się na obrazie captcha, które jeśli nie zostanie dostarczone do funkcji, będzie ciągiem losowym.
Korzystanie z pomocnika CAPTCHA
Po załadowaniu możesz wygenerować captcha w ten sposób:
$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'];
- Funkcja captcha wymaga biblioteki obrazów GD.
-
img_url
są tylkoimg_path
iimg_url
. - Jeśli „słowo” nie zostanie podane, funkcja wygeneruje losowy ciąg ASCII. Możesz stworzyć własną bibliotekę słów, z której możesz losować.
- Jeśli nie podasz ścieżki do czcionki TRUE TYPE, zostanie użyta natywna brzydka czcionka GD. Folder „captcha” musi mieć możliwość zapisu (666 lub 777)
- „Wygaśnięcie” (w sekundach) oznacza, jak długo obraz pozostanie w folderze captcha, zanim zostanie usunięty. Domyślnie są to dwie godziny.
Kompletny przykład
Oto przykład użycia z bazą danych. Na stronie, na której pokaże się CAPTCHA, będziesz mieć coś takiego:
$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="" />';
Następnie na stronie, która przyjmuje zgłoszenie, znajdziesz coś takiego:
// 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";
}