• ThinkPHP(SAE)调用验证码不能正确调用验证码


    现在,将官网的方法贴出:

    SAE下使用ThinkPHP验证码,非SaeVcode

    SaeVcode其实很弱弱,连验证码的尺寸都不能设置,对于开发和美工来说,是件很头痛的事情,经过我们技术员简单测试,发现ThinkPHP自带的验证码是可以在SAE下正常运行的。

    1、将“ThinkPHPExtendLibraryORGUtilString.class.php”拷贝至“
    ThinkPHPExtendEngineSaeLibExtendLibraryORGUtilString.class.php“;

    2、删除“ThinkPHPExtendEngineSaeLibExtendLibraryORGUtilImage_sae.class.php”中“buildImageVerify”函数;

    3、将“ThinkPHPExtendLibraryORGUtilImage.class.php”中“buildImageVerify” 函数拷贝至“ThinkPHPExtendEngineSaeLibExtendLibraryORGUtil Image_sae.class.php”即可。

    验证方式和生成验证码等都不用修改,和本地开发一样使用。
    供开发人员参考,错误之处请指教!

    因为笔者是刚刚用TP的新手,所以又看了下:

    ThinkPHP3.1快速入门(20)验证码

    在这个网络安全漫天飞的年代,验证码功能起码能算是一个值得信赖的好卫兵了。本篇我们就来讲下如何在ThinkPHP中使用验证码功能。

    获取扩展类库

    ThinkPHP的扩展中由图像处理类Image以及用于生成随机验证码的字符处理类String共同完成验证码功能,可以在在http://www.thinkphp.cn/extend/225.html下载图像处理类以及http://www.thinkphp.cn/extend/266.html下载字符处理类,或者下载官方的完整扩展包(http://www.thinkphp.cn/down/253.html)里面也已经包含以上扩展类了。如果是单独下载的扩展类库,把解压后的Image.class.php和String.class.php 一起放入ThinkPHP/Extend/Library/ORG/Util/(如果没有请手动创建)目录下面。由于验证码显示采用了GD库支持,所以需要环境支持GD库。

    生成验证码

    生成验证码其实很简单,只需要在你的Action中添加操作方法,一般为了避免受权限控制的影响,我们通常把这个方 法放到公共Action或者无需授权就能访问的控制器(例如PublicAction)中,下面我们以放到PublicAction控制器类中为例,代码 如下:

    1. class PublicAction extends Action{
    2.     Public function verify(){
    3.         import('ORG.Util.Image');
    4.         Image::buildImageVerify();
    5.     }
    6. }
    复制代码

    定义后,我们可以在任何需要验证码的模块中调用Public模块的verify方法来显示验证码,需要做的仅仅是在需要的模板中添加如下调用代码:

    1. <img src='!-APP-!/Public/verify/' />
    复制代码

    这样,我们访问该页面后就能看到默认的验证码图像显示,如下所示:

    如果你的验证码不能正常显示,请检查:

    1. 是否已经安装GD库支持并正常开启;
    2. Image类库以及String类库是否在正确的位置以及是否正确导入;
    3. 验证码输出之前是否有任何的其他输出(尤其是UTF8的BOM头信息输出);

    很 多开发人员验证码无法显示的情况多数是由于文件中有输出或者BOM头的情况,关于UTF8的BOM头检测有工具可以检测,很多编辑器也支持去掉BOM保存 (这个不清楚的话可以百度下)。这里要另外强调下很多开发人员在书写代码的时候不够规范,例如经常会有下面的情形发生:
    在文件的开头有空行

    在文件的尾部有空行

    以上两种情况都会导致页面的其他输出,从而导致验证码出错。

    验证码显示设置

    默认情况下,验证码采用随机的4位数字显示,我们可以通过参数来设置不同的显示方式,Image类的buildImageVerify方法用法如下:

    buildImageVerify 生成图像验证码
    用法 buildImageVerify($length,$mode,$type,$width,$height,$verifyName)
    参数 length 验证码的长度,默认为4位数
    model 验证字符串的类型,默认为数字,其他支持类型有0 字母 1 数字 2 大写字母 3 小写字母 4中文 5混合
    type 验证码的图片类型,默认为png
    width 验证码的宽度,默认会自动根据验证码长度自动计算
    height 验证码的高度,默认为22
    verifyName 验证码的SESSION记录名称,默认为verify

    验证输入

    每次生成验证码的时候,就会通过SESSION记录本次的验证码的md5后的字符串信息,所以,要检查验证码是否正确,我们只需要在Action中使用下面的代码判断就行了:

    1. if(session('verify') != md5($_POST['verify'])) {
    2.    $this->error('验证码错误!');
    3. }
    复制代码

    建议使用session方法来获取SESSION值,因为验证码生成方法里面也是采用的session方法保存的,可以避免受session前缀的影响而出错。这里的verify名称取决于你的验证码的verifyName参数的值。
    如果你的session功能不正常,可能会导致验证码检测报错的情况发生。

    中文验证码

    BuildImageVerify方法不支持中文验证码的显示,如果需要显示中文验证码,请使用GBVerify方法,用法示例:

    1. Public function verify(){
    2.     import("ORG.Util.Image");
    3.     Image::GBVerify();
    4. }
    复制代码

    显示效果如下:

    如果能够显示图片,但是看不到图片中的中文字符,请检查是否有拷贝字体文件到图像类库所在目录。默认使用的字体文件是simhei.ttf(该文件可以从window的Fonts目录下面找到)。
    GBVerify方法也有不同的参数用于设置验证码,具体用法如下:

    GBVerify生成中文验证码
    用法 GBVerify ($length,$type,$width,$height,$fontface,$verifyName)
    参数 length:验证码的长度,默认为4位数
    type:验证码的图片类型,默认为png
    width:验证码的宽度,默认会自动根据验证码长度自动计算
    height:验证码的高度,默认为50
    fontface:使用的字体文件,使用完整文件名或者放到图像类所在的目录下面,默认使用的字体文件是simhei.ttf(该文件可以从window的Fonts目录下面找到
    verifyName:验证码的SESSION记录名称,默认为verify

    验证码刷新

    如果随机生成的验证码看不清楚,就需要添加验证码刷新功能来重新生成,这个其实只是修改前端代码,后台的验证码生成方法无需修改。
    一般我们是用js方法来控制验证码的刷新,例如下面可以实现点击验证码图片刷新验证码:

    1. <script language="JavaScript">
    2. function fleshVerify(){ 
    3.     //重载验证码
    4.     var time = new Date().getTime();
    5.         document.getElementById('verifyImg').src= '!-APP-!/Public/verify/'+time;
    6. }
    7. </script>
    8. <img id="verifyImg" src='!-APP-!/Public/verify/' onclick="fleshVerify()" />
    复制代码

    当然,熟悉Jquery的开发人员,可以用Jquery代码来简化验证码刷新的js方法,这个就不再多说了。

    看了这两篇文章后,开始着手调用SAE下的验证码:

    首先,按照第一篇,替换函数和文件;

    然后,按照正常调用验证码的方式调用:

    <?php
      class PublicAction extends Action{
    	  public function verify(){
    		import('ORG.Util.Image_sae');
    		Image::buildImageVerify();
    	}  
    }
    ?>
    

     模板页调用:

          <form action="" method="post">
            <p>用户名:<input type="text" name="user" /></p>
            <p>密  码 :<input type="password" name="pwd" /></p>
            <p>验证码:<input type="text" name="checkcode" /><img src="{:U('Public/verify','','')}" /></p>
            <p><input name="submit" type="submit" value="登录" /><input type="reset" value="取消" /></p>
          </form>	
    

     但是,问题来了:

    图片不能正常显示,查看图像

    通过上面的代码也知道,PublicAction是继承的 Action基类,于是,打开ThinkPHP/Lib/Core/Action.class.php,查找Image类,没有找到!!!

    然后,打开Image_sae.class.php,这里面是包含class类的,也是说:import函数,没有导入成功!

    于是,我开始查看import的路径是否引用正确,发现APP/ORG/Image.class.php文件,然后修改代码,如下:

    <?php
      class PublicAction extends Action{
    	  public function verify(){
    		import('APP/ORG.Image');
    		Image::buildImageVerify();
    	}  
    }
    ?>
    

     结果:

    问题解决,当别人不鸟你的时候,就应该百度,自己尝试了!

  • 相关阅读:
    eclipse本地覆盖版本库
    数据库表分区
    oracle监听器启动,实例启动
    Mac 终端命令大全
    Mac基本用法
    wen前端学习计划
    css3animation模仿百度音乐的唱片旋转效果
    获取HTML DOM节点元素的方法的总结
    简单CSS技巧实现的Logo动画效果(很像导航栏上经常运用的效果,但有差别)
    详解 CSS 属性
  • 原文地址:https://www.cnblogs.com/liaoranty/p/4218019.html
Copyright © 2020-2023  润新知