当前位置: 首页 > news >正文

php 单独验证码可以显示_但调用验证码时无法显示,ThinkPHP(SAE)调用验证码不能正确调用验证码...

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

SAE下使用ThinkPHP验证码,非SaeVcode

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

1、将“ThinkPHP\Extend\Library\ORG\Util\String.class.php”拷贝至“

ThinkPHP\Extend\Engine\Sae\Lib\Extend\Library\ORG\Util\String.class.php“;

2、删除“ThinkPHP\Extend\Engine\Sae\Lib\Extend\Library\ORG\Util\Image_sae.class.php”中“buildImageVerify”函数;

3、将“ThinkPHP\Extend\Library\ORG\Util\Image.class.php”中“buildImageVerify”

函数拷贝至“ThinkPHP\Extend\Engine\Sae\Lib\Extend\Library\ORG\Util

\Image_sae.class.php”即可。

验证方式和生成验证码等都不用修改,和本地开发一样使用。

供开发人员参考,错误之处请指教!

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

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

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

获取扩展类库

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

生成验证码

生成验证码其实很简单,只需要在你的Action中添加操作方法,一般为了避免受权限控制的影响,我们通常把这个方

法放到公共Action或者无需授权就能访问的控制器(例如PublicAction)中,下面我们以放到PublicAction控制器类中为例,代码

如下:

classPublicActionextendsAction{

Publicfunctionverify(){

import('ORG.Util.Image');

Image::buildImageVerify();

}

}

复制代码

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

复制代码

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

%E5%A4%96%E9%93%BE%E7%BD%91%E5%9D%80%E5%B7%B2%E5%B1%8F%E8%94%BD

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

是否已经安装GD库支持并正常开启;

Image类库以及String类库是否在正确的位置以及是否正确导入;

验证码输出之前是否有任何的其他输出(尤其是UTF8的BOM头信息输出);

多开发人员验证码无法显示的情况多数是由于文件中有输出或者BOM头的情况,关于UTF8的BOM头检测有工具可以检测,很多编辑器也支持去掉BOM保存

(这个不清楚的话可以百度下)。这里要另外强调下很多开发人员在书写代码的时候不够规范,例如经常会有下面的情形发生:

在文件的开头有空行

%E5%A4%96%E9%93%BE%E7%BD%91%E5%9D%80%E5%B7%B2%E5%B1%8F%E8%94%BD

在文件的尾部有空行

%E5%A4%96%E9%93%BE%E7%BD%91%E5%9D%80%E5%B7%B2%E5%B1%8F%E8%94%BD

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

验证码显示设置

默认情况下,验证码采用随机的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中使用下面的代码判断就行了:

if(session('verify')!=md5($_POST['verify'])){

$this->error('验证码错误!');

}

复制代码

建议使用session方法来获取SESSION值,因为验证码生成方法里面也是采用的session方法保存的,可以避免受session前缀的影响而出错。这里的verify名称取决于你的验证码的verifyName参数的值。

如果你的session功能不正常,可能会导致验证码检测报错的情况发生。

中文验证码

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

Publicfunctionverify(){

import("ORG.Util.Image");

Image::GBVerify();

}

复制代码

显示效果如下:

%E5%A4%96%E9%93%BE%E7%BD%91%E5%9D%80%E5%B7%B2%E5%B1%8F%E8%94%BD

如果能够显示图片,但是看不到图片中的中文字符,请检查是否有拷贝字体文件到图像类库所在目录。默认使用的字体文件是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方法来控制验证码的刷新,例如下面可以实现点击验证码图片刷新验证码:

functionfleshVerify(){

//重载验证码

vartime =newDate().getTime();

document.getElementById('verifyImg').src='!-APP-!/Public/verify/'+time;

}

复制代码

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

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

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

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

class PublicAction extends Action{

public function verify(){

import('ORG.Util.Image_sae');

Image::buildImageVerify();

}

}

?>

模板页调用:

用户名:

密  码 :

验证码:verify','','')%7D

但是,问题来了:

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

zbwSKmI0KR6AAAAAElFTkSuQmCC

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

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

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

class PublicAction extends Action{

public function verify(){

import('APP/ORG.Image');

Image::buildImageVerify();

}

}

?>

结果:

rhIXUvI0puhytN0cibNSfGk+dKKLM4evMm1B71j1JPWvUCZp9VtitAiZRa0UySnH9t5WcHHfcaAbhUDulV8AUwAq3OgZ0Z9AAAAAElFTkSuQmCC

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

相关文章:

  • php中转源码,PHP 转 ASCII
  • php+5+windows,PHP5终极安装——PHP5+IIS5+Windows2000Server
  • php网站目录禁止访问,禁止访问Apache目录
  • php上传打包下载,php在线打包下载
  • 52进制 java,Java实现的26进制转换
  • php自我介绍50字,简短自我介绍50字
  • matlab 添加子图图案,matplotlib给子图添加图例的方法
  • oracle exp exp-00056,ORACLE导出报EXP-00056错误解决办法
  • net网页,连接oracle数据库,.net程序远程连接Oracle数据库
  • 教务管理系统 免费 php,php教务信息发布与管理系统
  • php 多点到线距离,双绞线的通信距离是多少
  • oracle客户端没有tnsnames,安装好Oracle Client以后没有tnsnames.ora文件
  • 查linux进程数,linux进程状态查询——ps
  • linux 系统调用返回 1,Linux内核系统调用返回-1而不是{-1,-256}
  • win7保存不了linux系统凭据,Win7无法保存凭据导致网络打印机脱机怎么办 解决方法介绍...
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • create-react-app项目添加less配置
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ERLANG 网工修炼笔记 ---- UDP
  • Javascript 原型链
  • JS基础之数据类型、对象、原型、原型链、继承
  • js算法-归并排序(merge_sort)
  • Laravel5.4 Queues队列学习
  • React-flux杂记
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 搞机器学习要哪些技能
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 阿里云ACE认证学习知识点梳理
  • 移动端高清、多屏适配方案
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #在 README.md 中生成项目目录结构
  • (二)Eureka服务搭建,服务注册,服务发现
  • (接口封装)
  • (学习日记)2024.01.09
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ./configure,make,make install的作用(转)
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .NET中 MVC 工厂模式浅析
  • .net中生成excel后调整宽度
  • @Transactional 详解
  • @我的前任是个极品 微博分析
  • [ linux ] linux 命令英文全称及解释
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [AIGC codze] Kafka 的 rebalance 机制
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [Avalon] Avalon中的Conditional Formatting.
  • [BZOJ1053][HAOI2007]反素数ant