123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="utf-8" lang="utf-8">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0" />
- <title>验证码辅助函数 - CodeIgniter 中文手册|用户手册|用户指南|Wiki文档</title>
- <link rel="shortcut icon" href="http://codeigniter.org.cn/user_guide/../images/design/favicon.ico" type="image/x-icon" />
- <link rel="stylesheet" type="text/css" media="all" href="../userguide.css" />
- <link rel="search" href="http://codeigniter.org.cn/user_guide/../CodeIgniterSearch.xml" type="application/opensearchdescription+xml" title="CodeIgniter 搜索"/>
- <link rel="canonical" href="http://codeigniter.org.cn/user_guide/helpers/captcha_helper.html" />
- <script type="text/javascript" src="../nav/mootools.js-ver=20130324.js"></script>
- <script type="text/javascript" src="../nav/mootools-more.js-ver=20130324.js"></script>
- <script type="text/javascript" src="../nav/nav.js-ver=20130324.js"></script>
- <script type="text/javascript" src="../nav/user_guide_menu.js-ver=20130324.js"></script>
- <meta name="robots" content="all" />
- <meta name="author" content="ExpressionEngine Dev Team" />
- <meta name="description" content="CodeIgniter 中文手册, CodeIgniter 用户指南, CodeIgniter User Guide, Wiki 文档" />
- </head>
- <body>
- <!-- START NAVIGATION -->
- <div id="nav">
- <div id="nav_inner">
- <script type="text/javascript">create_menu('../');</script>
- </div>
- </div>
- <script type="text/javascript">_setNavigation();</script>
- <div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="切换目录" alt="切换目录" /></a></div>
- <div id="masthead" class="clearfix">
- <div class="topbar-hd"><h1>CodeIgniter 用户指南 版本 2.2.0</h1></div>
- <div class="topbar-tip">编辑文档、查看近期更改请 <a href="#">登录</a> 或 <a href="#">注册</a> <a href="#">找回密码</a></div> <div id="breadcrumb_right"><a href="../toc.html">目录页</a></div>
- </div>
- <!-- END NAVIGATION -->
- <!-- START BREADCRUMB -->
- <table cellpadding="0" cellspacing="0" border="0" style="width:100%">
- <tr>
- <td id="breadcrumb">
- <a href="#" target="_blank">CodeIgniter 中国首页</a> ›
- <a href="../index.html">用户指南首页</a> › 验证码辅助函数 </td>
- <td id="searchbox">
- <form method="get" action="http://www.google.com.hk/search" target="google_window">
- <input type="hidden" name="client" value="pub-0176846097796333"></input>
- <input type="hidden" name="forid" value="1"></input>
- <input type="hidden" name="ie" value="UTF-8"></input>
- <input type="hidden" name="oe" value="UTF-8"></input>
- <input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.org.cn/user_guide/" />
- 搜索用户指南
- <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />
-
- <input type="submit" class="submit" name="sa" value="Go" />
- </form>
- </td>
- </tr>
- </table>
- <!-- END BREADCRUMB -->
- <div style="clear:both;text-align:right;padding: 6px 40px 0 0;">
- <a href="#" target="_blank">查看原文</a>
- </div>
- <!--<br clear="all" />--><!-- START CONTENT -->
- <div id="content">
- <h1>CAPTCHA 辅助函数</h1>
- <p>验证码辅助函数用来生成图片验证码</p>
- <h2>加载辅助函数</h2>
- <p>用下面的代码加载验证码辅助函数:</p>
- <code>$this->load->helper('captcha');</code>
- <p>可用的函数如下:</p>
- <h2>create_captcha(<var>$data</var>)</h2>
- <p>根据你指定的一系列参数创建验证码图像, 返回值是一个包含此图像数据的数组.</p>
- <code>[array]<br />
- (<br />
- 'image' => IMAGE TAG<br />
- 'time' => TIMESTAMP (毫秒)<br />
- 'word' => CAPTCHA WORD<br />
- )</code>
- <p>"image"是实际存在image标记:
- <code><img src="http://example.com/captcha/12345.jpg" width="140" height="50" /></code></p>
- <p>这里的"time"是一个毫秒级的时间戳,作为图片文件名(不包含扩展名). 就像这样: 1139612155.3422</p>
- <p>"word"是验证码, 如果不提供, 将是一个随机字符串.</p>
- <h3>使用验证码辅助函数:</h3>
- <p>加载后你可以向这样产生一个验证码:</p>
- <code>$vals = array(<br />
- 'word' => 'Random word',<br />
- 'img_path' => './captcha/',<br />
- 'img_url' => 'http://example.com/captcha/',<br />
- 'font_path' => './path/to/fonts/texb.ttf',<br />
- 'img_width' => '150',<br />
- 'img_height' => 30,<br />
- 'expiration' => 7200<br />
- );<br />
- <br />
- $cap = create_captcha($vals);<br />
- echo $cap['image'];</code>
- <ul>
- <li>验证码辅助函数必须需要GD库.</li>
- <li>只有 img_path 和 img_url 参数是必须的.</li>
- <li>如果"word"未提供, 将自动产生一个ASCII字符串. 你也可以使用自己的词库,从里面随机挑选.</li>
- <li>如果未提供TRUE TYPE字体的路径, 将会使用GD自带的字体.</li>
- <li> "captcha" 目录必须可写(666, or 777)</li>
- <li>"expiration" (秒) 指定了验证码图片的超时删除时间. 默认是2小时.</li>
- </ul>
- <h3>配合数据库</h3>
- <p>为了在提交表单时用到验证,你需要将<kbd>create_captcha()</kbd>生成的结果保存到数据库。这样,当用户提交表单时,你就可以验证数据库里是否有此验证码或是否过期。</p>
- <p>这是一个数据表的例子:</p>
- <code>CREATE TABLE captcha (<br />
- captcha_id bigint(13) unsigned NOT NULL auto_increment,<br />
- captcha_time int(10) unsigned NOT NULL,<br />
- ip_address varchar(16) default '0' NOT NULL,<br />
- word varchar(20) NOT NULL,<br />
- PRIMARY KEY `captcha_id` (`captcha_id`),<br />
- KEY `word` (`word`)<br />
- );</code>
- <p>这是一个使用数据库的例子. 一个带验证码的页面显示如下:</p>
- <code>$this->load->helper('captcha');<br />
- $vals = array(<br />
- 'img_path' => './captcha/',<br />
- 'img_url' => 'http://example.com/captcha/'<br />
- );<br />
- <br />
- $cap = create_captcha($vals);<br />
- <br />
- $data = array(<br />
- 'captcha_time' => $cap['time'],<br />
- 'ip_address' => $this->input->ip_address(),<br />
- 'word' => $cap['word']<br />
- );<br />
- <br />
- $query = $this->db->insert_string('captcha', $data);<br />
- $this->db->query($query);<br />
- <br />
- echo '提交下面的验证码:';<br />
- echo $cap['image'];<br />
- echo '<input type="text" name="captcha" value="" />';</code>
- <p>然后页面提交后如下处理:</p>
- <code>// 首先删除旧的验证码<br />
- $expiration = time()-7200; // 2小时限制<br />
- $this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration); <br />
- <br />
- // 然后再看是否有验证码存在:<br />
- $sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time > ?";<br />
- $binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);<br />
- $query = $this->db->query($sql, $binds);<br />
- $row = $query->row();<br />
- <br />
- if ($row->count == 0)<br />
- {<br />
- echo "你必须提交图像上显示的验证码";<br />
- }</code><p> </p>
- <div id="Contributors">
- 翻译贡献者:
- CosyBoy, Hex, LSvKing, 杜建宇</div>
- <div id="DocDate">
- 最后修改: 2012-02-05 23:50:26</div>
- </div>
- <!-- END CONTENT -->
- <div id="footer">
- <p>
- 上一个主题: <a href="array_helper.html">数组辅助函数</a> · <a href="#top">页首</a>
- · <a href="../index.html">用户指南首页</a> · 下一个主题: <a href="cookie_helper.html">Cookie 辅助函数</a> </p>
- <p><a href="#">CodeIgniter</a> · 版权所有 © 2006-2013 · <a href="#">Ellislab, Inc.</a></p>
- <p>中文化: <a href="#">CodeIgniter 中国</a> · 制作: Hex · 版本: 1.30 · 鸣谢: 子非鱼</p>
- </div>
- </body>
- </html>
|