<?PHP
session_start();
session_register('login_validate');
$type = 'gif';
$width= 40;
$height= 16;
header("Content-type: image/".$type);
srand((double)microtime()*1000000);
$randval = randStr(4,"");
if($type!='gif' && function_exists('imagecreatetruecolor')){
$im = @imagecreatetruecolor($width,$height);
}else{
$im = @imagecreate($width,$height);
}
$r = Array(225,211,255,223);
$g = Array(225,236,237,215);
$b = Array(225,236,166,125); $key = rand(0,3); $backColor = ImageColorAllocate($im,$r[$key],$g[$key],$b[$key]);//背景色(随机)
$borderColor = ImageColorAllocate($im, 0, 0, 0);//边框色
$pointColor = ImageColorAllocate($im, 255, 170, 255);//点颜色 @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor);//背景位置
@imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor); //边框位置
$stringColor = ImageColorAllocate($im, 255,51,153); for($i=0;$i<=100;$i++){
$pointX = rand(2,$width-2);
$pointY = rand(2,$height-2);
@imagesetpixel($im, $pointX, $pointY, $pointColor);
} @imagestring($im, 3, 5, 1, $randval, $stringColor);
$ImageFun='Image'.$type;
$ImageFun($im);
@ImageDestroy($im);
$_SESSION['login_validate'] = $randval;
//产生随机字符串
function randStr($len=6,$format='ALL') {
switch($format) {
case 'ALL':
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; break;
case 'CHAR':
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; break;
case 'NUMBER':
$chars='0123456789'; break;
default :
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
break;
}
$string="";
while(strlen($string)<$len)
$string.=substr($chars,(mt_rand()%strlen($chars)),1);
return $string;
}
?>调用代码
<script language="javascript">
function RefershImage(){
var el = document.getElementById("chkimg");
el.src = 'show.php';
}
</script>
<body>
<img src="yz.php" name="chkimg" onMouseUP="RefershImage()" /> //yz.php就是上面生成验证码的文件名
<?body>有两个问题
1.只显示红X,但4位验证码已经生成了。为什么?
2.RefershImage()点击刷新验证码的函数,好像无效。哪写错了
session_start();
session_register('login_validate');
$type = 'gif';
$width= 40;
$height= 16;
header("Content-type: image/".$type);
srand((double)microtime()*1000000);
$randval = randStr(4,"");
if($type!='gif' && function_exists('imagecreatetruecolor')){
$im = @imagecreatetruecolor($width,$height);
}else{
$im = @imagecreate($width,$height);
}
$r = Array(225,211,255,223);
$g = Array(225,236,237,215);
$b = Array(225,236,166,125); $key = rand(0,3); $backColor = ImageColorAllocate($im,$r[$key],$g[$key],$b[$key]);//背景色(随机)
$borderColor = ImageColorAllocate($im, 0, 0, 0);//边框色
$pointColor = ImageColorAllocate($im, 255, 170, 255);//点颜色 @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor);//背景位置
@imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor); //边框位置
$stringColor = ImageColorAllocate($im, 255,51,153); for($i=0;$i<=100;$i++){
$pointX = rand(2,$width-2);
$pointY = rand(2,$height-2);
@imagesetpixel($im, $pointX, $pointY, $pointColor);
} @imagestring($im, 3, 5, 1, $randval, $stringColor);
$ImageFun='Image'.$type;
$ImageFun($im);
@ImageDestroy($im);
$_SESSION['login_validate'] = $randval;
//产生随机字符串
function randStr($len=6,$format='ALL') {
switch($format) {
case 'ALL':
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; break;
case 'CHAR':
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; break;
case 'NUMBER':
$chars='0123456789'; break;
default :
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
break;
}
$string="";
while(strlen($string)<$len)
$string.=substr($chars,(mt_rand()%strlen($chars)),1);
return $string;
}
?>调用代码
<script language="javascript">
function RefershImage(){
var el = document.getElementById("chkimg");
el.src = 'show.php';
}
</script>
<body>
<img src="yz.php" name="chkimg" onMouseUP="RefershImage()" /> //yz.php就是上面生成验证码的文件名
<?body>有两个问题
1.只显示红X,但4位验证码已经生成了。为什么?
2.RefershImage()点击刷新验证码的函数,好像无效。哪写错了
php.ini
extension=php_gd2.dll
去掉前面的;
这里哪有id属性?可是你的引用上却用到了
<script language="javascript">
function RefershImage(){
var el = document.getElementById("chkimg");
el.src = 'show.php';
}
</script>当然问题也许不是这样。还有你可以用多种浏览器进行测试!看是否有的能显示,而有不行。先排除是否浏览器兼容问题。从JS,到后台。再到细节化PHP调试。
这种写法必须完善的设置过 php.ini 后才能使用。应改做对 $_SESSION 赋值
<?php
session_start();
$type = 'gif';
header("Content-type: image/".$type);
$width= 40;
$height= 16;
$im=imagecreatetruecolor($width,$height);
srand((double)microtime()*1000000);
$randval = randStr(4,""); /*
if($type!='gif' && function_exists('imagecreatetruecolor')){
$im = @imagecreatetruecolor($width,$height);
}else{
$im = @imagecreate($width,$height);
}
*/$r = Array(225,211,255,223);
$g = Array(225,236,237,215);
$b = Array(225,236,166,125);
$key = rand(0,3);$backColor = ImageColorAllocate($im,$r[$key],$g[$key],$b[$key]);//背景色(随机)
$borderColor = ImageColorAllocate($im, 0, 0, 0);//边框色
$pointColor = ImageColorAllocate($im, 255, 170, 255);//点颜色
imagefill($im,0,0,$backColor);
$border_color = imagecolorallocate($im,200,200,200);
imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor); //边框位置
$stringColor = ImageColorAllocate($im, 255,51,153); for($i=0;$i<=100;$i++){
$pointX = rand(2,$width-2);
$pointY = rand(2,$height-2);
imagesetpixel($im,$pointX,$pointY,$pointColor);
}imagestring($im,3,5,1,$randval,$stringColor);
//$ImageFun='Image'.$type;
//$ImageFun($im); $_SESSION['login_validate'] = $randval;
imagegif($im);
imagedestroy($im);
//$_SESSION['login_validate'] = $randval;
//产生随机字符串
function randStr($len=6,$format='ALL') {
switch($format) {
case 'ALL':
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; break;
case 'CHAR':
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; break;
case 'NUMBER':
$chars='0123456789'; break;
default :
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
break;
}
$string="";
while(strlen($string)<$len)
$string.=substr($chars,(mt_rand()%strlen($chars)),1);
return $string;
}
?>可以了.你先把这个PHP执行一下看看能否直接生成图片验证,可以了再去做JS下的测试!错误总共有3个地方,具体我就不标注了,改了3个地方,风格和楼主你的代码尽可能一致!不做过多修改!区别点,自己比对一下以前的代码就可以了!