# 驗證碼輔助函數
驗證碼輔助函數文件包含了一些幫助你創建驗證碼圖片的函數。
[TOC=2,3]
## [加載輔助函數](http://codeigniter.org.cn/user_guide/helpers/captcha_helper.html#id6)
該輔助函數通過下面的代碼加載:
~~~
$this->load->helper('captcha');
~~~
## [使用驗證碼輔助函數](http://codeigniter.org.cn/user_guide/helpers/captcha_helper.html#id7)
輔助函數加載之后你可以像下面這樣生成一個驗證碼圖片:
~~~
$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,
'word_length' => 8,
'font_size' => 16,
'img_id' => 'Imageid',
'pool' => '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
// White background and border, black text and red grid
'colors' => array(
'background' => array(255, 255, 255),
'border' => array(255, 255, 255),
'text' => array(0, 0, 0),
'grid' => array(255, 40, 40)
)
);
$cap = create_captcha($vals);
echo $cap['image'];
~~~
* 驗證碼輔助函數需要使用 GD 圖像庫。
* 只有?**img_path**?和?**img_url**?這兩個參數是必須的。
* 如果沒有提供?**word**?參數,該函數將生成一個隨機的 ASCII 字符串。 你也可以使用自己的詞庫,從里面隨機挑選。
* 如果你不設置 TRUE TYPE 字體(譯者注:是主要的三種計算機矢量字體之一)的路徑,將使用 GD 默認的字體。
* "captcha" 目錄必須是可寫的。
* **expiration**?參數表示驗證碼圖片在刪除之前將保留多久(單位為秒),默認保留 2 小時。
* **word_length**?默認值為 8,?**pool**?默認值為 '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
* **font_size**?默認值為 16,GD 庫的字體對大小有限制,如果字體大小需要更大一點的話可以設置一種 TRUE TYPE 字體。
* **img_id**?將會設置為驗證碼圖片的 "id" 。
* **colors**?數組中如果有某個顏色未設置,將使用默認顏色。
### [添加到數據庫](http://codeigniter.org.cn/user_guide/helpers/captcha_helper.html#id8)
使用驗證碼函數是為了防止用戶胡亂提交,要做到這一點,你需要將?create_captcha()?函數返回的信息保存到數據庫中。 然后,等用戶提交表單數據時,通過數據庫中保存的數據進行驗證,并確保它沒有過期。
這里是數據表的一個例子:
~~~
CREATE TABLE captcha (
captcha_id bigint(13) unsigned NOT NULL auto_increment,
captcha_time int(10) unsigned NOT NULL,
ip_address varchar(45) NOT NULL,
word varchar(20) NOT NULL,
PRIMARY KEY `captcha_id` (`captcha_id`),
KEY `word` (`word`)
);
~~~
這里是使用數據庫的示例。在顯示驗證碼的那個頁面,你的代碼類似于下面這樣:
~~~
$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->where('captcha_time < ', $expiration)
->delete('captcha');
// 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.';
}
~~~
## [可用函數](http://codeigniter.org.cn/user_guide/helpers/captcha_helper.html#id9)
該輔助函數有下列可用函數:
create_captcha([$data = ''[,?$img_path = ''[,?$img_url = ''[,?$font_path = '']]]])
參數:
* **$data**?(array) -- Array of data for the CAPTCHA
* **$img_path**?(string) -- Path to create the image in
* **$img_url**?(string) -- URL to the CAPTCHA image folder
* **$font_path**?(string) -- Server path to font
返回: array('word' => $word, 'time' => $now, 'image' => $img)
返回類型: array
根據你提供的一系列參數生成一張驗證碼圖片,返回包含此圖片信息的數組。
~~~
array(
'image' => IMAGE TAG
'time' => TIMESTAMP (in microtime)
'word' => CAPTCHA WORD
)
~~~
**image**?就是一個 image 標簽:
~~~
<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
~~~
**time**?是一個毫秒級的時間戳,作為圖片的文件名(不帶擴展名)。就像這樣:1139612155.3422
**word**?是驗證碼圖片中的文字,如果在函數的參數中沒有指定 word 參數,這將是一個隨機字符串。
- 歡迎使用 CodeIgniter
- 安裝說明
- 下載 CodeIgniter
- 安裝說明
- 從老版本升級
- 疑難解答
- CodeIgniter 概覽
- CodeIgniter 將從這里開始
- CodeIgniter 是什么?
- 支持特性
- 應用程序流程圖
- 模型-視圖-控制器
- 設計與架構目標
- 教程 - 內容提要
- 加載靜態內容
- 讀取新聞條目
- 創建新聞條目
- 結束語
- 常規主題
- CodeIgniter URL
- 控制器
- 保留名稱
- 視圖
- 模型
- 輔助函數
- 使用 CodeIgniter 類庫
- 創建類庫
- 使用 CodeIgniter 驅動器
- 創建驅動器
- 創建核心系統類
- 創建附屬類
- 鉤子 - 擴展框架核心
- 自動加載資源
- 公共函數
- 兼容性函數
- URI 路由
- 錯誤處理
- 網頁緩存
- 程序分析
- 以 CLI 方式運行
- 管理你的應用程序
- 處理多環境
- 在視圖文件中使用 PHP 替代語法
- 安全
- PHP 開發規范
- 類庫參考
- 基準測試類
- 緩存驅動器
- 日歷類
- 購物車類
- 配置類
- Email 類
- 加密類
- 加密類(新版)
- 文件上傳類
- 表單驗證類
- FTP 類
- 圖像處理類
- 輸入類
- Javascript 類
- 語言類
- 加載器類
- 遷移類
- 輸出類
- 分頁類
- 模板解析類
- 安全類
- Session 類
- HTML 表格類
- 引用通告類
- 排版類
- 單元測試類
- URI 類
- 用戶代理類
- XML-RPC 與 XML-RPC 服務器類
- Zip 編碼類
- 數據庫參考
- 數據庫快速入門: 示例代碼
- 數據庫配置
- 連接你的數據庫
- 查詢
- 生成查詢結果
- 查詢輔助函數
- 查詢構造器類
- 事務
- 數據庫元數據
- 自定義函數調用
- 數據庫緩存類
- 數據庫工廠類
- 數據庫工具類
- 數據庫驅動器參考
- 輔助函數參考
- 數組輔助函數
- 驗證碼輔助函數
- Cookie 輔助函數
- 日期輔助函數
- 目錄輔助函數
- 下載輔助函數
- 郵件輔助函數
- 文件輔助函數
- 表單輔助函數
- HTML 輔助函數
- 語言輔助函數
- Inflector 輔助函數
- 數字輔助函數
- 路徑輔助函數
- 安全輔助函數
- 表情輔助函數
- 字符串輔助函數
- 文本輔助函數
- 排版輔助函數
- URL 輔助函數
- XML 輔助函數
- 向 CodeIgniter 貢獻你的力量