解决PHP生成验证码不显示的问题

11 篇文章 0 订阅

验证码不显示:

在这里插入图片描述

问题描述:

确保自己的写的代码没有问题之后,发现生成的验证码一会显示。

解决方案:

 	ob_clean();  //关键代码,防止出现'图像因其本身有错无法显示'的问题。
    header('content-type:image/jpeg');
    imagejpeg($img);

通过查询资料,发现,只要在 header(‘content-type:image/jpeg’); 之前添加上**ob_clean();**即可

完成源码:

<?php
// 封装验证码
function getVerify($type = 1, $length = 4, $width = 200, $height = 50, $font_face = 'simfang.ttf', $point_count = 200, $line_count = 3)
{


    // $width = 200;
    // $height = 50;

    $img = imagecreatetruecolor($width, $height); //画布
    $bg_color = imagecolorallocate($img, 255, 255, 255); //画布背景颜色
    imagefilledrectangle($img, 0, 0, $width, $height, $bg_color); //填充背景到 画布

    //随机颜色函数
    function get_color($img)
    {
        return imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
    }

    /*
    count = 4
    1、数字
    2、字母
    3、数字+字母
    4、汉字
    */
    // $type = 1;
    // $length = 4;

    switch ($type) {
        case 1:
            // 数字
            $str = join('', array_rand(range(0, 9), $length));
            break;
        case 2:
            // 字母
            $arr = array_flip(array_merge(range('a', 'z'), range('A', "Z"))); //array_flip()交换键名和键值
            $str = join('', array_rand($arr, $length));
            echo $str;
            break;
        case 3:
            $arr = array_flip(array_merge(range(0, 9), range('a', 'z'), range("A", "Z")));
            $str = join('', array_rand($arr, $length));
            echo $str;
            // 数字+字母
            break;
        case 4:
            // 汉字
            $str = '哦黄金间碧玉竹黄金间碧玉竹用明快的节奏立一座金黄的雕像让太阳的光泼洒而来让游动的树影包抄而来让人类旦古不变的合唱一直传过历史的标志杆黄金间碧玉竹在歌声中永远亮出虚怀的精神向上的力量月光从云罅撒下的时候有吉他在叶影中幽幽地唱象风一样轻象月光一样静吉他在向它诉说自己的欢乐或哀怨于是它想起那些以它为母题的歌唱不禁黯然它更喜欢丝一般回旋的旋律把它搁在一边而它因此在情感的倾诉中被当作知音悬铃木又叫法国梧桐法国梧桐又叫悬铃木生物老师曾经这样说我拾了片巴掌大的黄叶想悬铃木是自然界中娇弱的男子春风一来绿叶扶疏冬风一到落叶归土我知道只在春天中显示强大的并不是强者悬铃木又叫法国梧桐法国梧桐也怯弱怯弱在哪里都存在不分国度不分民族因此我喜欢柠檬桉的性格假莲翘的绿铺上山坡去平行地叠起两块四方的翡翠象绿色的领奖台放射光辉领到阳光的爱抚和风的温柔孩童由衷的惊叹大人深思熟虑后的赞美领到云影的阴郁星空的不安美人蕉的羞惭仙人掌从周身进发的妒疾领到花工忖度的目光张开大口的剪子修整的行为和整齐的规则实现后开心的笑意领奖台是块多棱体也许真是生命欲求自然美却寻求修饰所以生命倘有所得也就有所失去树是大地的造物树影是阳光的鞭子当时光纷纷扬扬象浮云一样飘过历史的天窗树的家族完成了漫长的迁徙继续着漫长的世袭完全地占据了高山大地树是空间的运动员穿着各种服装的运动员当地球的弧面切向太空树是球面上运动的健将地球的奇迹朝宇宙射去箭的辉光穿织着霞霓使宇宙愕然凝视树是心灵的对应物以明亮展示欢乐以黯淡透彻悲哀当人类从图腾崇拜中解放出来又没入新的图腾崇拜树成了诗的偶像心灵的偶像人类的情感在树的年轮中划下长长的抛物线美的光环罩在树上象日晕月华放射光芒绿是美美是春天春天不会被遗忘树因此一直不停地为人的情感照过去现在并将永远';
            $str_arr = str_split($str, 3);
            $str = join('', array_rand(array_flip($str_arr), $length));
            echo $str;
            break;
        default:
            exit('非法参数');
            break;
    }

    //生成验证码内容
    // $font_face = '1.ttf'; //默认字体

    for ($i = 0; $i < $length; $i++) {
        $font_size = mt_rand(25, 28);
        $angle = mt_rand(-15, 20); //角度
        $x = 20 + ceil($width / $length) * $i;
        $y = mt_rand(ceil($height / 2), $height);
        $color = get_color($img);

        $text = mb_substr($str, $i, 1);

        echo '---' . $text . '--';
        imagettftext($img, $font_size, $angle, $x, $y, $color, $font_face, $text);
    }


    //添加干扰电
    // $point_count = 200; //默认干扰点数量
    if ($point_count > 0) {
        for ($i = 0; $i < $point_count; $i++) {
            $color = get_color($img);
            imagesetpixel($img, mt_rand(0, $width), mt_rand(0, $height), $color);
        }
    }

    //添加干扰线
    // $line_count = 3;
    if ($line_count > 0) {
        for ($i = 0; $i < $line_count; $i++) {
            $color = get_color($img);
            imageline($img, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $color);
        }
    }


    // 添加狐仙
    ob_clean();  //关键代码,防止出现'图像因其本身有错无法显示'的问题。
    header('content-type:image/jpeg');
    imagejpeg($img);

    imagedestroy($img);
}
// getVerify($type = 1, $length = 4, $width = 200, $height = 50, $font_face = '1.ttf', $point_count = 200, $line_count = 3)
getVerify(4);

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值