验证码

2016-10-28  本文已影响0人  一人之下冯宝宝

源码

先写tx.php文件

<?php 
session_start();
header('Content-type:image/gif');
$image_w=100;
$image_h=25;
$number=range(0,9);
$character=range('A','Z');
$result=array_merge($number,$character);
$string="";
$len=count($result);
for ($i=0; $i <4 ; $i++) { 
    $new_number[$i]=$result[rand(0,$len-1)];
    $string=$string.$new_number[$i];
}
$_SESSION['string']=$string;
$check_image=imagecreatetruecolor($image_w, $image_h);
$white=imagecolorallocate($check_image, 255, 255, 255);
$black=imagecolorallocate($check_image, 0,0,0);
imagefill($check_image, 0, 0, $white);
for ($i=0; $i <100 ; $i++) { 
    imagesetpixel($check_image, rand(0,$image_w), rand(0,$image_h),$black);
}
for ($i=0; $i <count($new_number) ; $i++) { 
    $x=mt_rand(1,8)+$image_w*$i/4;
    $y=mt_rand(1,$image_h/4);
    $color=imagecolorallocate($check_image,mt_rand(0,200) , mt_rand(0,200),mt_rand(0,200));
   imagestring($check_image, 5, $x, $y, $new_number[$i], $color);
}
imagepng($check_image);
imagedestroy($check_image);
?>

在另一个页面写

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">
</head>
    <body>
        <form action=""method="post">
            <p>验证码:<input type="text"size="10"name="check" />
            <img src="tx.php"/></p>
            <p><input type="submit"name="ok"value="提交" /></p>
        </form>
    </body>
</html>
<?php 
session_start();
if (isset($_POST['ok'])) {
    $checkstr=$_SESSION['string'];
    $str=$_POST['check'];
    if (strcasecmp($str, $checkstr)==0) {
        echo"<script>alert('验证码输入正确');</script>";
    }else{
        echo"<script>alert('输入错误');</script>";
    }

}

?>

几个问题

session是什么

当您运行一个应用程序时,您会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。它知道你何时启动应用程序,并在何时终止。但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态。通过在服务器上存储用户信息以便随后使用,PHP session 解决了这个问题(比如用户名称、购买商品等)。不过,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库中。
session_start: 初始 session。
session_destroy: 结束 session。
session_unset: 释放session内存。
session_name: 存取目前 session 名称。
session_module_name: 存取目前 session 模块。
session_save_path: 存取目前 session 路径。
session_id: 存取目前 session 代号。
session_register: 注册新的变量。
session_unregister: 删除已注册变量。
session_is_registered: 检查变量是否注册。
session_decode: Session 资料解码。
session_encode: Session 资料编码。
还有个全局变量就是:$_SESSION

header()是什么

PHP 中 header()函数的作用是给客户端发送头信息。

什么是头信息?

这里只作简单解释,详细的自己看http协议。在 HTTP协议中,服务器端的回答(response)内容包括两部分:头信息(header) 和 体内容,这里的头信息不是HTML中的<head></head>部分,同样,体内容也不是<BODY>< /BODY>。头信息是用户看不见的,里面包含了很多项,包括:服务器信息、日期、内容的长度等。而体内容就是整个HTML,也就是你所能看见的全 部东西。

*头信息有什么用呢?

1、跳转:当浏览器接受到头信息中的 Location: xxxx 后,就会自动跳转到 xxxx 指向的URL地址,这点有点类似用 js 写跳转。但是这个跳转只有浏览器知道,不管体内容里有没有东西,用户都看不到。
2、指定网页的内容: 同样一个XML文件,如果头信息中指定:Content-type: application/xml 的话,浏览器会将其按照XML文件格式解析。但是,如果头信息中是:Content-type: text/xml 的话,浏览器就会将其看作存文本解析。(浏览器不是按照扩展名解析文件的)**
3、附件**: 不知道大家有没有注意,有些时候在一些网站下载东西,点下载连接以后,结果浏览器将这个附件当成网页打开 了,里面显示的都是乱码,这个问题也和头信息有关。有时候浏览器根据Content-type 来判断是打开还是保存,这样有时就会判断错误(主要是网站设计者忘记写Content-type)。其实,还有一个可以来指定该内容为附件、需要保存,这 个就是:Content-Disposition: attachment; filename="xxxxx"
3、附件:// 指定内容为附件header('Content-Disposition: attachment; filename="downloaded.pdf"');// 打开文件,并输出readfile('original.pdf');

range()是什么

range() 函数创建一个包含指定范围的元素的数组
1.返回一个包含从 "0" 到 "50" 之间并以 10 递增的元素的数组

<?php
$number = range(0,50,10);
print_r ($number);?>

2.使用字母 - 返回一个包含从 "a" 到 "d" 之间的元素的数组

<?php
$letter = range("a","d");
print_r ($letter);
?>

php里面怎么定义数组

<?php
$a = array("中国人","亚州人","龙王爷","西藏自治区");//方法一
$b[0] = "苹果";                                 //方法二
$b[1] = "苹果";
$b[2] = "苹果";
$b[3] = "苹果";
$b[4] = "苹果";
$c = array("one" => "中国人","tow" =>"亚州人","three" => "龙王爷","four" => "西藏自治区");         
                                              //方法三
var_dump($a);
echo "<br />";
var_dump($b);
echo "<br />";
var_dump($c);?>

php字符串的连接

连接字符串和连接赋值运算符

其他

1.array_merge() 函数把一个或多个数组合并为一个数组
2.count函数计算数组或者对象里面的所有元素个数**
3.mt_rand() 比rand() 快四倍,很多老的 libc 的随机数发生器具有一些不确定和未知的特性而且很慢。PHP 的 rand() 函数默认使用 libc 随机数发生器。mt_rand() 函数是非正式用来替换它的语法 mt_rand(min,max)说明 如果没有提供可选参数 min 和 max,mt_rand() 返回 0 到 RAND_MAX 之间的伪随机数。例如想要 5 到 15(包括 5 和 15)之间的随机数,用 mt_rand(5, 15)。
4.strcasecmp() 比较两个字符串(不区分大小写) 一样则输出为0

几个图像函数

imagecreatetruecolor()//建立的是一幅大小为 x和 y的黑色图像(默认为黑色)
imagecreate()//函数是基于一个调色板的画布,函数的单位为像素
imagecolorallocate( resource $image, int $red, int $green, int $blue)// 为一幅图像分配颜色
imagefill($img,0,0,$color)//填充颜色函数
imagestring()//水平地画一行字符串
imagesetpixel()//在 image 图像中用 color 颜色在 x ,y 坐标(图像左上角为 0,0)上画一个
imagepng()//以 PNG 格式将图像输出到浏览器或文件
imagedestroy()//图像处理完成后,使用imagedestroy()函数销毁图像资源释放内存

更多图像处理函数

上一篇下一篇

猜你喜欢

热点阅读