PHP生成验证码时“图像因其本身有错无法显示”的解决办法

    添加时间:2013-8-8 点击量:

    PHP生成验证码时“图像因其本身有错无法显示”的解决办法。


    今天应用代码进行PHP生成校验码功能的实现,发明firefox一向提示“图像.......因其本身有错无法显示”的题目,作者也提示了说“若是浏览器显示“图像XXX因其本身有错无法显示”,可尽量去掉文中空格”,但把代码中所有空格都去掉了还是不克不及显示查验。


    于是深度google,大项目组的解决规划也是将“<?”这句代码前的空格回车一切都删掉以防止有html输出,但这底子解决不了我的题目,后来看到有人在Header(Content-type: image/PNG);这句代码前应用ob_clean()清除输出,成果一试之下果真成功。现将原代码批改后贴到下面,以备不时之需:


    确认码生成文件checkNum_session.php



    <?php
    
    //验证码
    Header(Content-type: image/png);
    /
    初始化
    /
    ¥border = 1; //是否要边框 1要:0不要
    ¥how = 4; //验证码位数
    ¥w = ¥how15; //宽度
    ¥h = 20; //高度
    ¥fontsize = 6; //字体大小
    ¥alpha = abcdefghijkmnopqrstuvwxyz; //验证码内容1:字母
    ¥number = 023456789; //验证码内容2:数字
    ¥randcode = ; //验证码字符串初始化
    srand((doublemicrotime()1000000); //初始化随机数种子
    ¥im = ImageCreate(¥w¥h); //创建验证
    /

    绘制根蒂根基框架
    /
    ¥bgcolor = ImageColorAllocate(¥im, 255, 255, 255); //设置靠山色彩
    ImageFill(¥im, 0, 0, ¥bgcolor); //填充靠山色
    if¥border
    {
    ¥black = ImageColorAllocate(¥im, 0, 0, 0); //设置边框色彩
    ImageRectangle(¥im, 0, 0, ¥w-1, ¥h-1, ¥black);//绘制边框
    }
    /
    逐位产生随机字符
    /
    for¥i=0; ¥i<¥how; ¥i++
    {
    ¥alpha_or_number = mt_rand(0, 1); //字母还是数字
    ¥str = ¥alpha_or_number¥alpha : ¥number;
    ¥which = mt_rand(0, strlen¥str)-1); //取哪个字符
    ¥code = substr¥str¥which, 1); //取字符
    ¥j = !¥i ? 4 : ¥j+15; //绘字符地位
    ¥color3 = ImageColorAllocate(¥immt_rand(0,100), mt_rand(0,100), mt_rand(0,100)); //字符随即色彩
    ImageChar(¥im¥fontsize¥j, 3, ¥code¥color3); //绘字符
    ¥randcode .= ¥code; //逐位参加验证码字符串
    }
    //把验证码字符串写入session
    session_start();
    ¥_SESSION[authnum_session] = ¥randcode;
    /
    添加干扰
    /
    for¥i=0; ¥i<1; ¥i++)//绘靠山干扰线
    {
    ¥color1 = ImageColorAllocate(¥immt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰线色彩
    ImageArc(¥immt_rand(-5,¥w), mt_rand(-5,¥h), mt_rand(20,300), mt_rand(20,200), 55, 44, ¥color1); //干扰线
    }
    for¥i=0; ¥i<¥how40; ¥i++)//绘靠山干扰点
    {
    ¥color2 = ImageColorAllocate(¥immt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰点色彩
    ImageSetPixel(¥immt_rand(0,¥w), mt_rand(0,¥h), ¥color2); //干扰点
    }
    //关键代码,防止呈现图像因其本身有错无法显示的题目
    ob_clean();
    /画图停止/
    Imagegif(
    ¥im);
    ImageDestroy(
    ¥im);
    /画图停止/


    有关php验证码的内容,大师还可以参考如下的文章:
    php验证码 三个实例分享


    php自定义大小验证码
    php生成扭曲及扭转的验证码
    php验证码(GD库生成验证码)的例子
    php验证码的例子
    php 雪花靠山 验证码


    接下来看,确认码调用文件sessionValidate.php



    <span style=font-size:14px;><?php
    
    session_start();
    //在页起首要开启session,
    //error_reporting(2047);

    session_destroy();
    //将session去掉,以每次都能取新的session值;
    //用seesion 结果不错,也很便利

    ?>
    <html>
    <head>
    <title>session 验证实例</title>
    </head>
    <body>
    此例为session验证实例
    <form action= method=post>
    验证码:
    <input type=text name=validate value= size=10> <img src=checkNum_session.php><br>
    <input type=submit>
    </form>
    <?php
    //打印上一个session;
    echo 上一个session:<b>.¥_SESSION[authnum_session].</b><br>;
    ¥validate=;
    ifisset¥_POST[validate])){
    ¥validate=¥_POST[validate];
    echo 您刚才输入的是:.¥_POST[validate].<br>状况:;
    if¥validate!=¥_SESSION[authnum_session]){
    //断定session值与用户输入的验证码是否一致;
    echo <font color=red>输入有误</font>;
    }
    else{
    echo <font color=green>经由过程验证</font>;
    }
    }
    /
    //打印全部session;
    PrintArr(¥_SESSION);
    function PrintArr(¥aArray){
    echo <xmp>;
    print_r(¥aArray);
    echo </xmp>;
    }
    /
    ?></span>

    彼此相爱,却不要让爱成了束缚:不如让它成为涌动的大海,两岸乃是你们的灵魂。互斟满杯,却不要同饮一杯。相赠面包,却不要共食一个。一起歌舞欢喜,却依然各自独立,相互交心,却不是让对方收藏。因为唯有生命之手,方能收容你们的心。站在一起却不要过于靠近。—— 纪伯伦《先知》
    分享到: