codeigniter
CAPTCHAヘルパー
サーチ…
このヘルパーの読み込み
このヘルパーは、次のコードを使用してロードされます。
コントローラ自体 (*は何度も何度も繰り返すことができます)
$this->load->helper('captcha');
config/autoload.php
( 1回だけロード )
$autoload['helper'] = array('captcha');
create_captcha($ data)
CAPTCHAを入力として生成するための一連の情報を取得し、指定したイメージを作成し、イメージに関する連想データの配列を返します。
[array]
(
'image' => IMAGE TAG
'time' => TIMESTAMP (in microtime)
'word' => CAPTCHA WORD
)
「画像」は実際の画像タグです。
<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
「時間」は、ファイル拡張子のないイメージ名として使用されるマイクロタイムスタンプです。次のような数字になります: 1139612155.3422
「単語」はキャプチャ画像に表示される単語で、関数に供給されない場合はランダムな文字列になります。
CAPTCHAヘルパーの使用
ロードされると、次のようなcaptchaを生成することができます:
$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'];
- キャプチャ機能にはGDイメージライブラリが必要です。
-
img_path
とimg_url
だけが必要です。 - "word"が指定されていない場合、この関数はランダムなASCII文字列を生成します。ランダムに描くことができるあなた自身の単語ライブラリをまとめるかもしれません。
- TRUE TYPEフォントへのパスを指定しないと、ネイティブの醜いGDフォントが使用されます。 "captcha"フォルダは書き込み可能でなければなりません(666、または777)
- 「有効期限」(秒)は、画像が削除される前にキャプチャフォルダに保存される時間を示します。デフォルトは2時間です。
完全な例
次に、データベースの使用例を示します。 CAPTCHAが表示されるページには、次のようなものがあります:
$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="" />';
次に、投稿を受け入れるページに次のようなものがあります:
// 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";
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow