PHP生成验证码

生成验证码的类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//验证码类
class ValidateCode {
//private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
private $charset = 'ABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
private $code;//验证码
private $codelen = 6;//验证码长度
private $width = 150;//宽度
private $height = 44;//高度
private $img;//图形资源句柄
private $font;//指定的字体
private $fontsize = 32;//指定字体大小
private $fontcolor;//指定字体颜色
//构造方法初始化
public function __construct() {
$this->font = dirname(__FILE__).'/font/Nexabold.ttf';//注意字体路径要写对,否则显示不了图片
}
//生成随机码
private function createCode() {
$_len = strlen($this->charset)-1;
for ($i=0;$i<$this->codelen;$i++) {
$this->code .= $this->charset[mt_rand(0,$_len)];
}
}

//生成背景
private function createBg() {
$this->img = imagecreatetruecolor($this->width, $this->height);
$color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
}

//生成文字
private function createFont() {
$_x = $this->width / $this->codelen;
for ($i=0;$i<$this->codelen;$i++) {
$this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]);
//imagettftext函数说明
//$this->img 这个是画布资源
//$this->fontsize 官方文档的解释是,字体大小,其长度单位依赖于GD库的版本,对于GD1来说是像素,对于GD2来说是磅(point)。
//mt_rand(-30,30) 是旋转角度。
//$_x*$i+mt_rand(1,5) 和 $this->height / 1.4 被绘制字符串的第一个字符的基线点。单位是像素。这里涉及到字体设计的基本知识--基线。这个点绝对不是左上角,而具体是什么取决于所使用的字体是如何设计的。对于宋体、楷体、黑体等常见的字体中的汉字,这个点大概位于字体的左下部分;而对于英文字母和标点符号,则各不相同。
//$this->fontcolor 字体的颜色
//$this->font 字体文件
//$this->code[$i] 要渲染的字符串。需要注意必须是UTF-8编码的字符串。
}
}

//生成线条、雪花
private function createLine() {
//线条
for ($i=0;$i<6;$i++) {
$color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
}
//雪花
for ($i=0;$i<100;$i++) {
$color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
}
}
//输出
private function outPut() {
header('Content-type:image/png');
imagepng($this->img);
imagedestroy($this->img);
}
//对外生成
public function doimg() {
$this->createBg();
$this->createCode();
$this->createLine();
$this->createFont();
$this->outPut();
}
//获取验证码
public function getCode() {
return strtolower($this->code);
}
}

//使用验证码代码(这是个简单的输出图片)
session_start();
require './ValidateCode.class.php'; //先把类包含进来,实际路径根据实际情况进行修改。
$_vc = new ValidateCode(); //实例化一个对象
$_vc->doimg();
$_SESSION['authnum_session'] = $_vc->getCode();//验证码保存到SESSION中

在登陆页面上只要用图片包含这页面就可以了

注意是的php要打开gd2扩展
这边放着个简单的字体文件可以下载直接使用Nexabold.ttf

IIS php 出现500错误

  • 我首先想到的是我配置错误了
  • 我有的目录需要写的权限,然后我把需要的目录和文件加上了IIS_User账号写权限还是不能显示
  • 没办法了网上搜了一下说设置php.ini display_errors = On 能看到错误了,靠什么都看不到
  • 再找有说 display_errors = Off
  • log_errors = Off
  • error_reporting = E_ALL & ~E_NOTICE | E_WARNING
  • 试了下还是什么都没有
  • 还有说是身份验证的问题的 我看了下能正常访问的访问的也是一样看来不是这问题了
  • 最后找到个显示错误的
  • “错误页” 双击进去后,看最右边的“操作”下的“编辑功能设置…”,将“错误响应”下的“详细错误”勾上
  • 这样就显示错误了
  • 靠原来我的映射模块设置错误了 应该是FastCgiModule 设置成了 HttpCacheModule
  • 改了能成功访问了

新开发环境配置

安装g++

  • yum install g++

安装mysql-devel

  • yum install mysql-devel
  • 默认安装的目录有点不一样
  • ln -s /usr/lib64/mysql/libmysqlclient.so.16.0.0 /usr/local/mysql/lib/libmysqlclient.so

安装svn

  • 默认的版本1.6.11有错误安装新版本
  • 1.添加源
  • vi /etc/yum.repos.d/wandisco-svn.repo

[WandiscoSVN]

2、yum删除旧的包

  • yum remove subversion*
    3.安装新的包

  • yum clean all
  • yum install subversion

libev源码安装

  • ./configure
  • make
  • make install

  • hiredis源码安装

  • make
  • make install

jsoncpp源码安装

  • 先要解压 scons-2.5.0.tar.gz
  • 进入jsoncpp源码目录
  • python scons目录/script/scons platform=linux-gcc
  • 然后复制 jsoncpp 目录下include/json 到 /usr/local/include
  • 然后复制 jsoncpp 目录下 libs/ a和so 文件到 /usr/local/lib

libiconv源码安装

  • ./configure –prefix=/usr/local
  • make
  • make install