最模板 - 外贸网站建设,外贸网站模板

最模板

当前位置: 首页 > 建站教程 > php教程 >

php 生成验证码图片不显示问题

时间:2014-06-09 16:40来源: 作者: 点击:
今天在做一个php验证码程序时发现生成出来的图片不显示,开始以为是php gd库未打开,查用phpinfo查了是可以打开的啊,下面小编来给大家介绍此问题解决办法。 清除了bom,代码也是顶行开始写的,

今天在做一个php验证码程序时发现生成出来的图片不显示,开始以为是php gd库未打开,查用phpinfo查了是可以打开的啊,下面小编来给大家介绍此问题解决办法。

清除了bom,代码也是顶行开始写的,gd库也是开启的,从这里来看估计不是gd库的问题了,可能出在程序那句代码上。

生成验证码的代码:

  1. <?php 
  2. /* 
  3. * 验证码产生程序 
  4. */ 
  5. $letter = ''
  6. //获取随机数字 
  7. for ($i=0; $i<2; $i++) { 
  8.     $letter .= chr(mt_rand(48,57)); 
  9. //获取随机字母 
  10. for ($i=0; $i<2; $i++) { 
  11.     $letter .= chr(mt_rand(65,90)); 
  12. //重构字符顺序 
  13. $strs = str_split($letter); 
  14. shuffle ($strs); 
  15. $rndstring = ""
  16. while (list ( , $str) = each ($strs)) { 
  17.     $rndstring .= $str
  18.  
  19. //如果支持GD,则绘图 
  20. if(function_exists("imagecreate")) 
  21.     //向浏览器写入cookie 
  22.     setcookie("zjs_ckstr", md5( strtolower($rndstring) ), time()+300,'/');//验证码有效期5分钟     
  23.     $rndcodelen = strlen($rndstring); 
  24.     //图片大小 
  25.     $im = imagecreate(100,30); 
  26.     //$im = imagecreatefromgif("code.gif"); 
  27.     //字体 
  28.     $font_type = dirname(dirname(__FILE__))."/data/font/AvantGardeBookBT.ttf"
  29.     //背景颜色 
  30.     $backcolor = imagecolorallocate($im,255,255,255);    
  31.     //字体色 
  32.     //不支持 imagettftext 
  33.     $fontColor = ImageColorAllocate($im, 0,0,0); 
  34.     //支持 imagettftext 
  35.     $fontColor2 = ImageColorAllocate($im, 0,0,0); 
  36.     //阴影 
  37.     $fontColor1 = ImageColorAllocate($im, 255,255,25); 
  38.     //添加背景杂点 
  39.     $pixColor = imagecolorallocate($im, 199, 199, 199);//杂点颜色 
  40.     for($j=0; $j<1000; $j++){ 
  41.         imagesetpixel($im, rand(0,100), rand(0,30), $pixColor); 
  42.     } 
  43.     //添加背景线 
  44.     for($j=0; $j<=3; $j++){ 
  45.         //背景线颜色 
  46.         $lineColor1 = ImageColorAllocate($im, rand(0, 255),rand(0, 255),rand(0, 255)); 
  47.         //背景线方向大小 
  48.         imageline($im,rand(0,40),rand(3,25),rand(40,88),rand(3,25),$lineColor1); 
  49.     }    
  50.  
  51.     $strposs = array(); 
  52.     //文字 
  53.     for($i=0;$i<$rndcodelen;$i++){ 
  54.       if(function_exists("imagettftext")){ 
  55.           $strposs[$i][0] = $i*16+17;//x轴 
  56.           $strposs[$i][1] = mt_rand(20,23);//y轴 
  57.           imagettftext($im, 5, 5, $strposs[$i][0]+1, $strposs[$i][1]+1, $fontColor1$font_type$rndstring[$i]); 
  58.       } else
  59.           imagestring($im, 5, $i*16+7, mt_rand(2, 4), $rndstring[$i], $fontColor); 
  60.       } 
  61.     } 
  62.     //文字 
  63.     for($i=0;$i<$rndcodelen;$i++){ 
  64.       if(function_exists("imagettftext")){ 
  65.           imagettftext($im, 16,5, $strposs[$i][0]-1, $strposs[$i][1]-1, $fontColor2$font_type$rndstring[$i]); 
  66.       } 
  67.     } 
  68.   header("Pragma:no-cachern"); 
  69.   header("Cache-Control:no-cachern"); 
  70.   header("Expires:0rn"); 
  71.   //输出特定类型的图片格式,优先级为 gif -> jpg 
  72.   if(function_exists("imagegif")){ 
  73.         header("content-type:image/gifrn"); 
  74.       imagegif($im); 
  75.   }else
  76.         header("content-type:image/jpegrn"); 
  77.       imagejpeg($im); 
  78.   } 
  79.   ImageDestroy($im); 
  80. ?> 

感觉是不是没有问题了,后来百度发现一高人说关键是加入了ob_clean,了这个让我想了原因。

解决办法:ob_clean();关键代码,防止出现'图像因其本身有错无法显示'的问题,加到 header 输出之前,代码如下:header('Content-Type: image/png');

(责任编辑:admin)
------分隔线----------------------------
栏目列表
推荐内容