PHP 验证码 高洛峰 细说PHP
生活随笔
收集整理的这篇文章主要介绍了
PHP 验证码 高洛峰 细说PHP
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
前端页面index.php
<?php header('content-type:text/html;charset=utf-8'); if(isset($_POST['dosubmit'])){session_start();if(strtoupper($_SESSION['code']) == strtoupper($_POST['code'])){echo '输入成功!<br/>';}else{echo '输入不对<br/>';} } ?> <form action="index.php" method="post"> 用户名:<input type="text" name="username" value=""/><br/> 标题:<input type="text" name="title" value=""/><br/> 内容:<textarea name="content" cols="40" rows="4"></textarea><br/> 验证码:<input type="text" size="4" name="code"><img src="test.php" onclick ="this.src='test.php?'+Math.random()"/><br/> <input type="submit" name="dosubmit" value="留言"/> </form>生成验证码图片test.php
<?php //开启sessionsession_start();require 'print.php';//导入验证码类文件$vcode =new Vcode(80,30,4);//实例化验证码类//将验证码放到服务器自己的空间保存一份$_SESSION['code'] = $vcode->getCode();//将验证码的图片输出$vcode->outimg();//调用方法验证码类 print.php
<?php class Vcode{private $width; //宽private $heigth; //高private $num; //数量private $code; //验证码private $img; //图像资源//构造方法function __construct($width=80,$height=25,$num=4){$this->width = $width;$this->heigth = $height;$this->num = $num;$this->code = $this->createCode();}//获取字符的验证码function getCode(){return $this->code;}//输出验证码图形function outimg(){//创建背景 颜色 大小 边框$this->createBack(); //画字 大小 字体颜色$this->outString();//干扰元素 点 线条$this->setDisturb();//输出图像$this->printImg();}//创建背景private function createBack(){//创建资源$this->img = p_w_picpathcreatetruecolor($this->width, $this->heigth);//设置随机背景颜色$bgcolor = p_w_picpathcolorallocate($this->img, rand(225, 255), rand(225, 255), rand(225, 255));//填充背景色p_w_picpathfill($this->img, 0, 0, $bgcolor);//画矩形$bordercolor = p_w_picpathcolorallocate($this->img, 0, 0, 0);p_w_picpathrectangle($this->img, 0, 0, $this->width-1, $this->heigth-1, $bordercolor);}//画字private function outString(){for($i=0;$i<$this->num;$i++){ $color = p_w_picpathcolorallocate($this->img, rand(0, 128), rand(0, 128), rand(0, 128));$font = rand(3,5);$x = 3 + ($this->width/$this->num)*$i;$y = rand(1, 5);p_w_picpathstring($this->img, $font,$x, $y, $this->code{$i}, $color);}}//设置干扰元素private function setDisturb(){//加上点数for($i=0;$i<100;$i++){$color = p_w_picpathcolorallocate($this->img, rand(0, 255), rand(0, 255), rand(0, 255));p_w_picpathsetpixel($this->img, rand(1, $this->width-2), rand(1, $this->heigth-2), $color);}//加上线条for($i=0;$i<10;$i++){$color = p_w_picpathcolorallocate($this->img, rand(0, 255), rand(0, 128), rand(0, 255));p_w_picpatharc($this->img, rand(-10, $this->width+10), rand(-10, $this->heigth+10), rand(30, 300), rand(30, 300), 55, 44, $color);}}//输出图像private function printImg(){// header("Content-Type:p_w_picpath/jpeg");// p_w_picpathjpeg($this->img);if(p_w_picpathtypes() & IMG_GIF){header("Content-Type:p_w_picpath/gif");p_w_picpathjpeg($this->img);}elseif(p_w_picpathtypes() & IMG_JPEG){header("Content-Type:p_w_picpath/jpeg");p_w_picpathjpeg($this->img);}elseif(p_w_picpathtypes() & IMG_JPG){header("Content-Type:p_w_picpath/jpg");p_w_picpathjpeg($this->img);}elseif(p_w_picpathtypes() & IMG_PNG){header("Content-Type:p_w_picpath/png");p_w_picpathjpeg($this->img);}}//生成验证码private function createCode(){$codes = "23456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";$code = "";for($i=0;$i<$this->num;$i++){$code .=$codes{rand(0,strlen($codes)-1)};}return $code;}//释放图像资源function __destruct(){p_w_picpathdestroy($this->img);}}转载于:https://blog.51cto.com/11410485/1842156
总结
以上是生活随笔为你收集整理的PHP 验证码 高洛峰 细说PHP的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 2016/08/24 CppCon 20
- 下一篇: ThinkPHP 3.2公共类库、应用类