验证码

作者: 一人之下冯宝宝 | 来源:发表于2016-10-28 22:42 被阅读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()函数销毁图像资源释放内存
    

    更多图像处理函数

    相关文章

      网友评论

          本文标题:验证码

          本文链接:https://www.haomeiwen.com/subject/ncphuttx.html