zf实现验证码(页面验证码)
来源:互联网 发布:科大讯飞java招聘 编辑:程序博客网 时间:2024/05/20 20:45
第一:搭建项目
项目名 captcha
Window+R启动 运行窗口,输入 cmd,启动Dos
>d:
>cd d:\wamp\www\test
>zf show version
>zf create project captcha
创建项目 captcha完毕。
第二:虚拟主机路径
http-vhosts.conf文件添加
#==================test captcha=================#
<VirtualHost *:80>
DocumentRoot "D:/wamp/www/test/captcha/public"
ServerName captcha.test.com
# This should be omitted in the production environment
SetEnv APPLICATION_ENV development
<Directory "D:/wamp/www/test/captcha/public">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
hosts文件添加
#=============test captcha======================#
127.0.0.1 captcha.test.com
浏览器直接 captcha.test.com指向captcha项目
第三:修改项目
captcha->application目录修改
改为modules模式(模块模式,分模块清晰)
modules->default->controllers
modules->default->views (default是模块名)
删除原先的controllers 、views
修改配置文件application.ini
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
改为:
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
第四:配置 静态文件目录地址常量
application.ini添加
constants.STATIC_SITE = http://captcha.test.com
因为静态文件放置在public目录下,而http://captcha.test.com指向public目录
Bootstrap.php解析application.ini
public function _initApplications(){$applications = new Zend_Config_Ini(APPLICATION_PATH."/configs/application.ini", APPLICATION_ENV);Zend_Registry::set('applications', $applications);return $applications;}
public function _initConstants(){$constants = Zend_Registry::get('applications')->constants;$constants = $constants ? $constants : array();foreach($constants as $constant => $value){defined($constant) || define($constant, $value);//defined() 函数检查某常量是否存在}}
第五:修改default->views->scripts->index->index.phtml文件
<label for="">验证码:</label><input type="text" class="inp_code" name='captcha'/><img src="<?php echo STATIC_SITE;?>/html/images/common/s.gif" class="code_img" /><!-- <?php echo STATIC_SITE;?>静态文件目录地址 --><a href="#" class='changeCaptcha'>看不清?换一个</a>
现在情况如图:
第六:验证码生成
1,添加助手文件目录
library->Ata->Controller->Action->Helpers目录下
2,修改Bootstrap.php文件,使助手文件Captcha.php能正常使用
public function _initHelper(){Zend_Controller_Action_HelperBroker::addPrefix('Ata_Controller_Action_Helpers');}
3,助手文件Captcha.php(验证码生成等方面)
Captcha.php(别人的代码直接拿来用的)
<?phpclass Ata_Controller_Action_Helpers_Captcha extends Zend_Controller_Action_Helper_Abstract{ public function img() { $session = new Zend_Session_Namespace('captcha'); $captcha = $session->content; $img = imagecreate(120, 40); $bg = imagecolorallocate($img, 255, 255, 128); $fonts = array( APPLICATION_PATH.'/../library/Ata/Fonts/arial.ttf', APPLICATION_PATH.'/../library/Ata/Fonts/arial.ttf', APPLICATION_PATH.'/../library/Ata/Fonts/arial.ttf', APPLICATION_PATH.'/../library/Ata/Fonts/arial.ttf', APPLICATION_PATH.'/../library/Ata/Fonts/fakto9.ttf', APPLICATION_PATH.'/../library/Ata/Fonts/fakto10.ttf', APPLICATION_PATH.'/../library/Ata/Fonts/faktos.ttf', APPLICATION_PATH.'/../library/Ata/Fonts/fpnf.ttf' ); $grey = imagecolorallocate($img, 128, 128, 128); $black = imagecolorallocate($img, 0, 0, 0); for($i=0;$i<25;$i++){ $x = rand(0,120); $y = rand(0,40); $size = rand(20,100); $angle_A = rand(0,360); $angle_B = rand(0,360); imagearc($img, $x, $y, $size, $size, $angle_A, $angle_B, $grey); } for($i=0;$i<10;$i++){ $x = rand(0,120); $y = rand(0,40); $size = rand(3,3); imagefilledarc($img, $x, $y, $size, $size, 0, 360, $black, IMG_ARC_PIE); } for($i=0;$i<strlen($captcha);$i++){ $angle = rand(-10,10); $rand = rand(0,3); imagettftext($img, 20, $angle, 17+25*$i, 35, $grey, $fonts[$rand], $captcha[$i]); imagettftext($img, 20, $angle, 15+25*$i, 32, $black, $fonts[$rand], $captcha[$i]); } header('Content-type: image/png'); imagepng($img); imagedestroy($img); return ''; } public function set(){ $chars = "ABCDEFGHKMNPQRSTWXY3456789"; $captcha = ''; for($i=0;$i<4;$i++){ $captcha.= $chars[rand(0,strlen($chars)-1)]; }; $session = new Zend_Session_Namespace('captcha'); $session->content = $captcha; return 1; } public function get(){ $session = new Zend_Session_Namespace('captcha'); return $session->content; } public function verify($captcha){ $session = new Zend_Session_Namespace('captcha'); return strtolower($session->content)==strtolower($captcha); }}
3.1,用到session,配置application.ini
resources.session.name = "HRS2ATAPSID"
resources.session.gc_maxlifetime = 43200
resources.session.use_trans_sid = 0
resources.session.use_cookies = 1
resources.session.use_only_cookies = 1
resources.session.cookie_path = "/"
resources.session.remember_me_seconds = 43200
resources.session.cookie_domain = ".test.com"
memcache.server.0.host = 172.16.26.234
memcache.server.0.port = 11221
memcache.server.1.host = 172.16.26.234
memcache.server.1.port = 11222
memcache.lifetime = 43200
memcache.compressed = 0
使用memcache存储session
3.2,ttf 文件放置位置
library->Ata->Fonts目录下
第七:写控制器 CaptchaController.php来调用助手文件Captcha.php(为页面js调用准备方法)
CaptchaController.php文件
<?phpclass CaptchaController extends Zend_Controller_Action{ public function imgAction(){ echo $this->getHelper('Captcha')->img();exit; } public function setAction(){ echo $this->getHelper('Captcha')->set();exit; } public function verifyAction(){ $captcha = $this->requestParam('captcha'); echo $this->getHelper('Captcha')->verify($captcha)?'y':'n';exit; }}
第八:页面事件响应(刷新验证码)
加载jquery.js文件
<?php $this->headScript()->prependFile(STATIC_SITE."/html/scripts/common/jquery.js");?><?php echo $this->headScript();?>
写js方法
<script type="text/javascript">$(document).ready(function(){function setCaptchaImage(){//set验证码图片$.get('/captcha/set?'+Math.random(),//get请求 urlMath.random()随机数function(data){//返回的参数$('img.code_img').attr('src', '/captcha/img?'+Math.random());//替换验证图片});}$('.changeCaptcha').click(function(){//点击链接切换验证码setCaptchaImage();return false;});setCaptchaImage();//页面加载时就调用setCaptchaImage()方法,显示验证码});</script>
第九:最后如图
- zf实现验证码(页面验证码)
- zf验证码类(普通)
- zf验证码类(Zend_Captcha_Image)
- .net登录页面实现验证码验证
- ajax实现动态验证码验证(前端jsp页面)
- 页面验证码的实现
- 【Struts实现页面验证码】
- 验证码与页面验证
- 验证码与页面验证
- 完整的页面验证码实现
- jsp页面实现验证码功能
- java语言实现jsp页面验证码
- 登录页面图片验证码的实现
- jsp页面实现验证码功能
- Bootstrap+web+Idea实现登录页面(含验证码)
- Android项目开发(3)-注册验证码验证页面功能实现
- Android项目开发(4)-忘记密码---验证码验证页面功能实现
- 图形验证码页面
- Android 通过代码设置标题图标
- Eclipse报错 due to restriction on required library C:/Java/jdk1.6.0_10/jre/lib/rt.jar 解决方案
- PC串行接口串口定义
- android中正确导入第三方jar包
- 从数据库读取数据动态生成树形菜单示例
- zf实现验证码(页面验证码)
- 使用Spring+Junit4.4进行测试
- 母亲的唠叨
- .NET使用一般处理程序生成验证码!
- A valid provisioning profile for this executable was not found
- java 中 private public protected default 访问权限的区别
- 栈——郝斌版
- Struts2+Spring2.5+Hibernate3.5的整合开发
- oracle trunc函数使用介绍