关于php中验证码显示不出来的问题解决办法
2014-10-29 14:44
561 查看
首先先给一段源代码
<?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);
?>
检查办法
1.检查php.ini文件是否打开了 extention='php.gd2.dll',如果前面有 ; 要不该分号去掉,如果没有这检查代码的问题
2.代码只要在header代码前面加上一段就可以了
ob_clean();
<?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);
?>
检查办法
1.检查php.ini文件是否打开了 extention='php.gd2.dll',如果前面有 ; 要不该分号去掉,如果没有这检查代码的问题
2.代码只要在header代码前面加上一段就可以了
ob_clean();
相关文章推荐
- 打开网站php出现乱码问题的解决办法以及无法显示验证码
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法
- php,session验证码不一致,慢半拍,老显示上次验证码问题之完美解决(共享验证码代码)
- 关于QTE4的汉字显示问题的终极解决办法!!!(亲测可用!)
- 关于webview 加载本地图片资源 显示不出来的解决办法
- 关于CListCtrl控件更新Item的闪烁问题和一次插入大容量数据的显示问题解决办法
- 关于GridValue的刷新,列顺序混乱问题解决以及关于显示和隐藏列的办法
- 关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法
- 关于使用Intel集成显示芯片桌面右键迟钝问题的解决办法
- 关于webview 加载本地图片资源 显示不出来的解决办法
- jsp 不显示验证码图片问题的解决办法之一
- PHP关于代码转换问题比较完善的解决办法
- 由于IE版本问题导致SAP的F1帮助文档显示不出来的解决办法
- iTextSharp应用中关于“Cannot access a closed Stream”问题的解决办法(附带提供如何在页面中显示PDF的流)
- php验证码显示不出来解决方法
- 关于window2008计划任务前台显示和批处理无法正常执行问题的解决办法
- Compiere关于帮助显示乱码的问题解决办法
- 关于MemcacheDB PHP客户端的问题及解决办法
- 关于Window 7 系统磁盘无法显示的问题的解决办法
- 关于PHP页面显示乱码问题的解决