解决方案 »

  1.   

    $_nmsg = '';  //可能是少了这句
    for ($i=0;$i<$_rnd_code;$i++) {
    $_nmsg .= dechex(mt_rand(0,15));
    }
      

  2.   

    <?php
         $_width = 75;
     $_height = 25;
     $_rnd_code = 4;
     $_flag = false;
    $_nmsg = ''; //加上这个
    for ($i=0;$i<$_rnd_code;$i++) {
    $_nmsg .= dechex(mt_rand(0,15));
    }
    ......排错方法:
    注释掉 header('Content-Type: image/png');
    //输出图像
    //header('Content-Type: image/png');
    imagepng($_img);
    就可以看到错误信息即 $_nmsg .= dechex(mt_rand(0,15)); 时
    $_nmsg 没有初值,所以会用警告使用 error_reporting(0) ; 是自欺欺人的,并不能消除隐患
    何况位置也放错了
      

  3.   

    这段代码之前是否有其他html输出或空格之类的?如果没有在试下在前面加个session_start(); 看看
      

  4.   

    感觉是不是没有问题了,后来百度发现一高人说关键是加入了ob_clean,了这个让我想了原因。
    解决办法
    在header之前加入这个代码就行了
    ob_clean();  //关键代码,防止出现'图像因其本身有错无法显示'的问题。
      

  5.   

    那是因为你的程序文件有 BOM 头
    加上 ob_clean(); 也是在回避矛盾
      

  6.   

    <?php
         $_width = 75;
     $_height = 25;
     $_rnd_code = 4;
     $_flag = false;
     $_nmsg = '';
    for ($i=0;$i<$_rnd_code;$i++) {
    $_nmsg .= dechex(mt_rand(0,15));
    }
    /**
      $authnum='';
        //生成验证码字符
       $ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
       $list=explode(",",$ychar);//使用分隔符存储到数组中
       for($i=0;$i<4;$i++){
         $randnum=rand(0,35);
         $_nmsg.=$list[$randnum];  
       }
       */
    //保存在session
    $_SESSION['code'] = $_nmsg;//创建一张图像
    $_img = imagecreatetruecolor($_width,$_height);//白色
    $_white = imagecolorallocate($_img,255,255,255);//填充
    imagefill($_img,0,0,$_white);if ($_flag) {
    //黑色,边框
    $_black = imagecolorallocate($_img,0,0,0);
    imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);
    }//随即画出6个线条
    for ($i=0;$i<6;$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<100;$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++) {
    $_rnd_color = imagecolorallocate($_img,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));
    imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);
    }
    error_reporting(0) ;
    //输出图像
    header('Content-Type: image/png');
    imagepng($_img);//销毁
    imagedestroy($_img);
    ?>