博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何解决php 生成验证码图片不显示问题
阅读量:4553 次
发布时间:2019-06-08

本文共 2590 字,大约阅读时间需要 8 分钟。

最近遇到一个问题,就是验证码在别人的电脑上可以显示,但是我自己的电脑上去不能。原因找了好久,哈哈,终于找到了!现在给大家分享一下:

程序:

<?php

   
$w = 80; //设置图片宽和高
$h = 26;
$str = Array(); //用来存储随机码
$string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//随机挑选其中4个字符,也可以选择更多,注意循环的时候加上,宽度适当调整
for($i = 0;$i < 4;$i++){
   $str[$i] = $string[rand(0,35)];
   $vcode .= $str[$i];
}
session_start(); //启用超全局变量session
$_SESSION["vcode"] = $vcode;
$im = imagecreatetruecolor($w,$h);
$white = imagecolorallocate($im,255,255,255); //第一次调用设置背景色
$black = imagecolorallocate($im,0,0,0); //边框颜色
imagefilledrectangle($im,0,0,$w,$h,$white); //画一矩形填充
imagerectangle($im,0,0,$w-1,$h-1,$black); //画一矩形框
//生成雪花背景
for($i = 1;$i < 200;$i++){
   $x = mt_rand(1,$w-9);
   $y = mt_rand(1,$h-9);
   $color = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
   imagechar($im,1,$x,$y,"*",$color);
}
//将验证码写入图案
for($i = 0;$i < count($str);$i++){
   $x = 13 + $i * ($w - 15)/4;
   $y = mt_rand(3,$h / 3);
   $color = imagecolorallocate($im,mt_rand(0,225),mt_rand(0,150),mt_rand(0,225));
   imagechar($im,5,$x,$y,$str[$i],$color);
}
header("Content-type:image/jpeg"); //以jpeg格式输出,注意上面不能输出任何字符,否则出错
imagejpeg($im);
imagedestroy($im);
?>
验证过,在别人的电脑上能运行,但是我自己的电脑却无法运行。显示的结果如下:

原因如下:

 首先要声明一下的是,我以为是gd2库没有打开,但用phpinfo查看了,发现打开了。清除了bom,代码也是顶行开始写的,因此问题可能出现在代码上。后来经过研究,发现还是要更改一下程序,要在header前面加上ob_clean()这个语句,这样就可以运行了。

加在header输出之前:

ob_clean();  //关键代码,防止出现'图像因其本身有错无法显示'的问题。

header("Content-type:image/jpeg"); 

这样问题就得到了解决。

鉴于有些人说我这里有问题,我把改正的代码和结果给大家看看:

<?php

   
$w = 80; //设置图片宽和高
$h = 26;
$str = Array(); //用来存储随机码
$string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//随机挑选其中4个字符,也可以选择更多,注意循环的时候加上,宽度适当调整
for($i = 0;$i < 4;$i++){
   $str[$i] = $string[rand(0,35)];
   $vcode .= $str[$i];
}
session_start(); //启用超全局变量session
$_SESSION["vcode"] = $vcode;
$im = imagecreatetruecolor($w,$h);
$white = imagecolorallocate($im,255,255,255); //第一次调用设置背景色
$black = imagecolorallocate($im,0,0,0); //边框颜色
imagefilledrectangle($im,0,0,$w,$h,$white); //画一矩形填充
imagerectangle($im,0,0,$w-1,$h-1,$black); //画一矩形框
//生成雪花背景
for($i = 1;$i < 200;$i++){
   $x = mt_rand(1,$w-9);
   $y = mt_rand(1,$h-9);
   $color = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
   imagechar($im,1,$x,$y,"*",$color);
}
//将验证码写入图案
for($i = 0;$i < count($str);$i++){
   $x = 13 + $i * ($w - 15)/4;
   $y = mt_rand(3,$h / 3);
   $color = imagecolorallocate($im,mt_rand(0,225),mt_rand(0,150),mt_rand(0,225));
   imagechar($im,5,$x,$y,$str[$i],$color);
}
ob_clean();//原来的程序没有这一栏
header("Content-type:image/jpeg"); //以jpeg格式输出,注意上面不能输出任何字符,否则出错
imagejpeg($im);
imagedestroy($im);
?>

显示结果如下:

这样的话,结果是不是很明显了?

转载于:https://www.cnblogs.com/behindman/p/9547923.html

你可能感兴趣的文章
[kuangbin带你飞]专题六 最小生成树 J - Borg Maze
查看>>
[kuangbin带你飞]专题六 最小生成树 I - Agri-Net
查看>>
[kuangbin带你飞]专题六 最小生成树 K - The Unique MST (判断最小生成树是否唯一)...
查看>>
[kuangbin带你飞]专题六 最小生成树 L - 还是畅通工程 (简单最小生成树)
查看>>
计蒜客 最长不下降子序列 (贪心+二分nlogn算法)
查看>>
[kuangbin带你飞]专题十二 基础DP1 C - Monkey and Banana HDU - 1069
查看>>
Relatives POJ - 2407(不打表的欧拉函数 单求)
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher A - Number Sequence HDU - 1711 (kmp)
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher F - The Minimum Length HUST - 1010 (kmp循环节)...
查看>>
C - Aladdin and the Flying Carpet LightOJ - 1341 (唯一分解,素数筛法,因子个数)
查看>>
七夕节 HDU - 1215 (唯一分解 素数筛法 因子之和加强版)
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher I - Blue Jeans POJ - 3080 (找多个字符串的最长公共子序列,字典序最小)...
查看>>
F - Goldbach`s Conjecture LightOJ - 1259(素数筛)
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher J - Simpsons’ Hidden Talents HDU - 2594(kmp前后缀)...
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & ManacherC - 剪花布条 HDU - 2087 (kmp不覆盖匹配)...
查看>>
统计难题 HDU - 1251(字典树)
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher :G - Power Strings POJ - 2406(kmp简单循环节)...
查看>>
Let the Balloon Rise HDU - 1004 (字典树和map两种写法)
查看>>
[kuangbin带你飞]专题十六 KMP & 扩展KMP & ManacherK - Count the string HDU - 3336(前缀数量问题)...
查看>>
2019百度之星初赛一1001Polynomial(数学的函数收敛)
查看>>