captcha_helper.html 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="utf-8" lang="utf-8">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0" />
  6. <title>验证码辅助函数 - CodeIgniter 中文手册|用户手册|用户指南|Wiki文档</title>
  7. <link rel="shortcut icon" href="http://codeigniter.org.cn/user_guide/../images/design/favicon.ico" type="image/x-icon" />
  8. <link rel="stylesheet" type="text/css" media="all" href="../userguide.css" />
  9. <link rel="search" href="http://codeigniter.org.cn/user_guide/../CodeIgniterSearch.xml" type="application/opensearchdescription+xml" title="CodeIgniter 搜索"/>
  10. <link rel="canonical" href="http://codeigniter.org.cn/user_guide/helpers/captcha_helper.html" />
  11. <script type="text/javascript" src="../nav/mootools.js-ver=20130324.js"></script>
  12. <script type="text/javascript" src="../nav/mootools-more.js-ver=20130324.js"></script>
  13. <script type="text/javascript" src="../nav/nav.js-ver=20130324.js"></script>
  14. <script type="text/javascript" src="../nav/user_guide_menu.js-ver=20130324.js"></script>
  15. <meta name="robots" content="all" />
  16. <meta name="author" content="ExpressionEngine Dev Team" />
  17. <meta name="description" content="CodeIgniter 中文手册, CodeIgniter 用户指南, CodeIgniter User Guide, Wiki 文档" />
  18. </head>
  19. <body>
  20. <!-- START NAVIGATION -->
  21. <div id="nav">
  22. <div id="nav_inner">
  23. <script type="text/javascript">create_menu('../');</script>
  24. </div>
  25. </div>
  26. <script type="text/javascript">_setNavigation();</script>
  27. <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>
  28. <div id="masthead" class="clearfix">
  29. <div class="topbar-hd"><h1>CodeIgniter 用户指南 版本 2.2.0</h1></div>
  30. <div class="topbar-tip">编辑文档、查看近期更改请 <a href="#">登录</a> 或 <a href="#">注册</a>  <a href="#">找回密码</a></div> <div id="breadcrumb_right"><a href="../toc.html">目录页</a></div>
  31. </div>
  32. <!-- END NAVIGATION -->
  33. <!-- START BREADCRUMB -->
  34. <table cellpadding="0" cellspacing="0" border="0" style="width:100%">
  35. <tr>
  36. <td id="breadcrumb">
  37. <a href="#" target="_blank">CodeIgniter 中国首页</a>&nbsp;&#8250;&nbsp;
  38. <a href="../index.html">用户指南首页</a>&nbsp;&#8250;&nbsp;验证码辅助函数 </td>
  39. <td id="searchbox">
  40. <form method="get" action="http://www.google.com.hk/search" target="google_window">
  41. <input type="hidden" name="client" value="pub-0176846097796333"></input>
  42. <input type="hidden" name="forid" value="1"></input>
  43. <input type="hidden" name="ie" value="UTF-8"></input>
  44. <input type="hidden" name="oe" value="UTF-8"></input>
  45. <input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.org.cn/user_guide/" />
  46. 搜索用户指南&nbsp;
  47. <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />
  48. &nbsp;
  49. <input type="submit" class="submit" name="sa" value="Go" />
  50. </form>
  51. </td>
  52. </tr>
  53. </table>
  54. <!-- END BREADCRUMB -->
  55. <div style="clear:both;text-align:right;padding: 6px 40px 0 0;">
  56. <a href="#" target="_blank">查看原文</a>
  57. </div>
  58. <!--<br clear="all" />--><!-- START CONTENT -->
  59. <div id="content">
  60. <h1>CAPTCHA 辅助函数</h1>
  61. <p>验证码辅助函数用来生成图片验证码</p>
  62. <h2>加载辅助函数</h2>
  63. <p>用下面的代码加载验证码辅助函数:</p>
  64. <code>$this-&gt;load-&gt;helper('captcha');</code>
  65. <p>可用的函数如下:</p>
  66. <h2>create_captcha(<var>$data</var>)</h2>
  67. <p>根据你指定的一系列参数创建验证码图像, 返回值是一个包含此图像数据的数组.</p>
  68. <code>[array]<br />
  69. (<br />
  70. &nbsp;&nbsp;'image' => IMAGE TAG<br />
  71. &nbsp;&nbsp;'time' => TIMESTAMP (毫秒)<br />
  72. &nbsp;&nbsp;'word' => CAPTCHA WORD<br />
  73. )</code>
  74. <p>"image"是实际存在image标记:
  75. <code>&lt;img src=&quot;http://example.com/captcha/12345.jpg&quot; width=&quot;140&quot; height=&quot;50&quot; /&gt;</code></p>
  76. <p>这里的"time"是一个毫秒级的时间戳,作为图片文件名(不包含扩展名). 就像这样: 1139612155.3422</p>
  77. <p>"word"是验证码, 如果不提供, 将是一个随机字符串.</p>
  78. <h3>使用验证码辅助函数:</h3>
  79. <p>加载后你可以向这样产生一个验证码:</p>
  80. <code>$vals = array(<br />
  81. &nbsp;&nbsp;&nbsp;&nbsp;'word' => 'Random word',<br />
  82. &nbsp;&nbsp;&nbsp;&nbsp;'img_path' => './captcha/',<br />
  83. &nbsp;&nbsp;&nbsp;&nbsp;'img_url' => 'http://example.com/captcha/',<br />
  84. &nbsp;&nbsp;&nbsp;&nbsp;'font_path' => './path/to/fonts/texb.ttf',<br />
  85. &nbsp;&nbsp;&nbsp;&nbsp;'img_width' => '150',<br />
  86. &nbsp;&nbsp;&nbsp;&nbsp;'img_height' => 30,<br />
  87. &nbsp;&nbsp;&nbsp;&nbsp;'expiration' => 7200<br />
  88. &nbsp;&nbsp;&nbsp;&nbsp;);<br />
  89. <br />
  90. $cap = create_captcha($vals);<br />
  91. echo $cap['image'];</code>
  92. <ul>
  93. <li>验证码辅助函数必须需要GD库.</li>
  94. <li>只有 img_path 和 img_url 参数是必须的.</li>
  95. <li>如果"word"未提供, 将自动产生一个ASCII字符串. 你也可以使用自己的词库,从里面随机挑选.</li>
  96. <li>如果未提供TRUE TYPE字体的路径, 将会使用GD自带的字体.</li>
  97. <li> "captcha" 目录必须可写(666, or 777)</li>
  98. <li>"expiration" (秒) 指定了验证码图片的超时删除时间. 默认是2小时.</li>
  99. </ul>
  100. <h3>配合数据库</h3>
  101. <p>为了在提交表单时用到验证,你需要将<kbd>create_captcha()</kbd>生成的结果保存到数据库。这样,当用户提交表单时,你就可以验证数据库里是否有此验证码或是否过期。</p>
  102. <p>这是一个数据表的例子:</p>
  103. <code>CREATE TABLE captcha (<br />
  104. &nbsp;captcha_id bigint(13) unsigned NOT NULL auto_increment,<br />
  105. &nbsp;captcha_time int(10) unsigned NOT NULL,<br />
  106. &nbsp;ip_address varchar(16) default '0' NOT NULL,<br />
  107. &nbsp;word varchar(20) NOT NULL,<br />
  108. &nbsp;PRIMARY KEY `captcha_id` (`captcha_id`),<br />
  109. &nbsp;KEY `word` (`word`)<br />
  110. );</code>
  111. <p>这是一个使用数据库的例子. 一个带验证码的页面显示如下:</p>
  112. <code>$this-&gt;load-&gt;helper(&#x27;captcha&#x27;);<br />
  113. $vals = array(<br />
  114. &nbsp;&nbsp;&nbsp;&nbsp;&#x27;img_path&#x27; =&gt; &#x27;./captcha/&#x27;,<br />
  115. &nbsp;&nbsp;&nbsp;&nbsp;&#x27;img_url&#x27; =&gt; &#x27;http://example.com/captcha/&#x27;<br />
  116. &nbsp;&nbsp;&nbsp;&nbsp;);<br />
  117. <br />
  118. $cap = create_captcha($vals);<br />
  119. <br />
  120. $data = array(<br />
  121. &nbsp;&nbsp;&nbsp;&nbsp;&#x27;captcha_time&#x27; =&gt; $cap[&#x27;time&#x27;],<br />
  122. &nbsp;&nbsp;&nbsp;&nbsp;&#x27;ip_address&#x27; =&gt; $this-&gt;input-&gt;ip_address(),<br />
  123. &nbsp;&nbsp;&nbsp;&nbsp;&#x27;word&#x27; =&gt; $cap[&#x27;word&#x27;]<br />
  124. &nbsp;&nbsp;&nbsp;&nbsp;);<br />
  125. <br />
  126. $query = $this-&gt;db-&gt;insert_string(&#x27;captcha&#x27;, $data);<br />
  127. $this-&gt;db-&gt;query($query);<br />
  128. <br />
  129. echo &#x27;提交下面的验证码:&#x27;;<br />
  130. echo $cap[&#x27;image&#x27;];<br />
  131. echo &#x27;&lt;input type=&quot;text&quot; name=&quot;captcha&quot; value=&quot;&quot; /&gt;&#x27;;</code>
  132. <p>然后页面提交后如下处理:</p>
  133. <code>// 首先删除旧的验证码<br />
  134. $expiration = time()-7200; // 2小时限制<br />
  135. $this-&gt;db-&gt;query(&quot;DELETE FROM captcha WHERE captcha_time &lt; &quot;.$expiration); <br />
  136. <br />
  137. // 然后再看是否有验证码存在:<br />
  138. $sql = &quot;SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time &gt; ?&quot;;<br />
  139. $binds = array($_POST[&#x27;captcha&#x27;], $this-&gt;input-&gt;ip_address(), $expiration);<br />
  140. $query = $this-&gt;db-&gt;query($sql, $binds);<br />
  141. $row = $query-&gt;row();<br />
  142. <br />
  143. if ($row-&gt;count == 0)<br />
  144. &#123;<br />
  145. &nbsp;&nbsp;&nbsp;&nbsp;echo &quot;你必须提交图像上显示的验证码&quot;;<br />
  146. &#125;</code><p>&nbsp;</p>
  147. <div id="Contributors">
  148. 翻译贡献者:
  149. CosyBoy, Hex, LSvKing, 杜建宇</div>
  150. <div id="DocDate">
  151. 最后修改: 2012-02-05 23:50:26</div>
  152. </div>
  153. <!-- END CONTENT -->
  154. <div id="footer">
  155. <p>
  156. 上一个主题:&nbsp;&nbsp;<a href="array_helper.html">数组辅助函数</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;<a href="#top">页首</a>
  157. &nbsp;&middot;&nbsp;&nbsp;<a href="../index.html">用户指南首页</a>&nbsp;&nbsp;&middot;&nbsp;&nbsp;下一个主题:&nbsp;&nbsp;<a href="cookie_helper.html">Cookie 辅助函数</a> </p>
  158. <p><a href="#">CodeIgniter</a> &nbsp;&middot;&nbsp; 版权所有 &#169; 2006-2013 &nbsp;&middot;&nbsp; <a href="#">Ellislab, Inc.</a></p>
  159. <p>中文化: <a href="#">CodeIgniter 中国</a> &nbsp;&middot;&nbsp; 制作: Hex &nbsp;&middot;&nbsp; 版本: 1.30 &nbsp;&middot;&nbsp; 鸣谢: 子非鱼</p>
  160. </div>
  161. </body>
  162. </html>