这里有新鲜出炉的 PHP 设计模式,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
这篇文章主要介绍了 PHP 制作验证码, 使用 PHP 对网站验证码是为了防止使用程序恶意注册、暴力破解或批量发帖而设置的。
网站注册、登录又或者是留言页面, 都需要注册码来验证当前操作者的合法性, 为了防止网站被机器恶意注册。
生成验证码无非就那么几个步骤,首先是获取一个随机字符串,然后创建一个布画,将生成的字符串写到布画上,我们还可以在布画上画线画雪花,现在帖一段生成验证码的代码。
源代码:
- <?php
- session_start(); //开启session
- //创建随机码,并保存在session中
- for($i=0;$i<4;$i++)
- {
- $_nmsg.=dechex(mt_rand(0,15));
- }
- //保存到session中
- $_SESSION['code']=$_nmsg;
- //设置图片长和高
- $_width=75;
- $_height=25;
- //创建一张图像
- $_img=imagecreatetruecolor($_width,$_height);
- //白色背景
- $_white=imagecolorallocate($_img,255,255,255);
- //填充到背景上
- imagefill($_img,0,0,$_white);
- //黑色边框
- $_black=imagecolorallocate($_img,0,0,0);
- imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);
- //随即画出5个线条
- for($i=0;$i<5;$i++)
- {
- $_rnd_color=imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
- imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);
- }
- //雪花
- for($i=0;$i<10;$i++)
- {
- $_rnd_color=imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
- imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height),"*",$_rnd_color);
- }
- //输出验证码
- for($i=0;$i<strlen($_SESSION['code']);$i++)
- {
- imagestring($_img,5,10+$i*15,mt_rand(0,10),$_SESSION['code'][$i],$_blackr);
- }
- //输出图像
- header('Content-Type:image/png');
- imagepng($_img);
- //销毁图像
- imagedestroy($_img);
- ?>
代码中将使用以下函数:
mt_rand — 生成更好的随机数
int mt_rand ([int $min], int $max ) 很多老的 libc 的随机数发生器具有一些不确定和未知的特性而且很慢。PHP 的 rand() 函数默认使用 libc 随机数发生器。
mt_rand() 函数是非正式用来替换它的。该函数用了 Mersenne Twister 中已知的特性作为随机数发生器,它可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。
dechex — 十进制转换为十六进制返回一字符串,包含有给定 number 参数的十六进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 "ffffffff"。
imagecreatetruecolor — 新建一个真彩色图像
resource imagecreatetruecolor (int $x_size , int $y_size)
imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。
imagecolorallocate — 为一幅图像分配颜色
int imagecolorallocate (resource $image , int $red , int $green , int $blue)
imagecolorallocate() 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF。imagecolorallocate() 必须被调用以创建每一种用在 image 所代表的图像中的颜色。
imagefill — 区域填充
bool imagefill (resource $image , int $x , int $y , int $color)
imagefill() 在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。
imagerectangle — 画一个矩形
bool imagerectangle (resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col)
imagerectangle() 用 col 颜色在 image 图像中画一个矩形,其左上角坐标为 x1, y1,右下角坐标为 x2, y2。图像的左上角坐标为 0, 0。
imageline — 画一条线段
bool imageline (resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color)
imageline() 用 color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段。
imagestring — 水平地画一行字符串
bool imagestring (resource $image , int $font , int $x , int $y , string $s , int $col)
imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。
imagepng — 以 PNG 格式将图像输出到浏览器或文件
imagepng() 将 GD 图像流(image)以 PNG 格式输出到标准输出(通常为浏览器),或者如果用 filename 给出了文件名则将其输出到该文件。
imagedestroy — 销毁一图像
imagedestroy() 释放与 image 关联的内存。
将源代码保存为 code.php 是个 php 文件,我们该如何使用他呢?
imagepng 已经将这个 php 文件输出成了 png 文件
直接调用就可以了
<img src="mycode.php"/>
如果要使用验证码,记得开启 session 哦
- <?php
- session_start();
- echo $_SESSION['code'];
- ?>
希望本文所述对大家 PHP 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0809/342074.html