帝国CMS 验证码"因其本身有错而无法显示" 解决方法
2012/2/28 18:25:17 类别:网络编程摘要:最近应客户要求,用帝国CMS 套一个门户站,搞了几天,对整个系统有了个大概的了解,感觉还是很强大的,有很多程序设计上的可取之处. 对了说重点,关于验证码不显示(直接访问提示"因其本身有错无法显示")
最近应客户要求,用帝国CMS 套一个2012利率站,搞了几天,对整个系统有了个大概的了解,感觉还是很强大的,有很多程序设计上的可取之处. 对了说重点,关于验证码不显示(直接访问提示"因其本身有错无法显示")
焦急中百度一下,有很多原因,有因为GD库不支持,有因为路径不对....
尝试后,发现都没发解决我的,继续搜索
最终看到有人在Header("Content-type: image/PNG");这句代码前使用ob_clean();清除输出,结果一试之下果然成功。
下面贴下帝国的验证码显示代码 一句代码的强大 希望 帝国也跟进
//显示验证码
function ShowKey($v){
$vname=ecmsReturnKeyVarname($v);
$key=strtolower(domake_password(4));
ecmsSetShowKey($vname,$key);
ob_clean();
//是否支持gd库
if(function_exists("imagejpeg"))
{
header ("Content-type: image/jpeg");
$img=imagecreate(47,20);
$colorr=ReturnShowKeyColor($img);
$bgcolor=$colorr['bgcolor'];
$fontcolor=$colorr['fontcolor'];
$distcolor=$colorr['distcolor'];
imagefill($img,0,0,$bgcolor);
imagestring($img,5,6,3,$key,$fontcolor);
for($i=0;$i<90;$i++) //加入干扰象素
{
imagesetpixel($img,rand()%70,rand()%30,$distcolor);
}
imagejpeg($img);
imagedestroy($img);
}
elseif (function_exists("imagepng"))
{
header ("Content-type: image/png");
$img=imagecreate(47,20);
$colorr=ReturnShowKeyColor($img);
$bgcolor=$colorr['bgcolor'];
$fontcolor=$colorr['fontcolor'];
$distcolor=$colorr['distcolor'];
imagefill($img,0,0,$bgcolor);
imagestring($img,5,6,3,$key,$fontcolor);
for($i=0;$i<90;$i++) //加入干扰象素
{
imagesetpixel($img,rand()%70,rand()%30,$distcolor);
}
imagepng($img);
imagedestroy($img);
}
elseif (function_exists("imagegif"))
{
header("Content-type: image/gif");
$img=imagecreate(47,20);
$colorr=ReturnShowKeyColor($img);
$bgcolor=$colorr['bgcolor'];
$fontcolor=$colorr['fontcolor'];
$distcolor=$colorr['distcolor'];
imagefill($img,0,0,$bgcolor);
imagestring($img,5,6,3,$key,$fontcolor);
for($i=0;$i<90;$i++) //加入干扰象素
{
imagesetpixel($img,rand()%70,rand()%30,$distcolor);
}
imagegif($img);
imagedestroy($img);
}
elseif (function_exists("imagewbmp"))
{
header ("Content-type: image/vnd.wap.wbmp");
$img=imagecreate(47,20);
$colorr=ReturnShowKeyColor($img);
$bgcolor=$colorr['bgcolor'];
$fontcolor=$colorr['fontcolor'];
$distcolor=$colorr['distcolor'];
imagefill($img,0,0,$bgcolor);
imagestring($img,5,6,3,$key,$fontcolor);
for($i=0;$i<90;$i++) //加入干扰象素
{
imagesetpixel($img,rand()%70,rand()%30,$distcolor);
}
imagewbmp($img);
imagedestroy($img);
}
else
{
ecmsSetShowKey($vname,'ecms');
echo ReadFiletext("../data/images/ecms.jpg");
}
}
关键的一句 ob_clean(); 清除输出 谨记备查
