php生成的验证码显示x,解决PHP生成验证码无法显示的问题

28ebb849da45c74fd83118eebf39693d.png

今天使用代码进行PHP生成校验码功能的实现,发现firefox一直提示“图像.......因其本身有错无法显示”的问题,作者也提示了说“如果浏览器显示“图像XXX因其本身有错无法显示”,可尽量去掉文中空格”,但把代码中所有空格都去掉了还是不能显示检验图片。网上大部分的解决方案也是将“”这句代码前的空格回车一切都删掉以防止有html输出,但这根本解决不了我的问题,

后来看到有人在这句代码前使用ob_clean()清除输出,结果一试之下果然成功。

现将原代码修改后贴到下面,以备不时之需:

(请仔细阅读createCold方法)class validCode{

//可以控制产生几个字符!

private $width = 0;

private $height = 0;

function createCode(){

//$width = 20 + 10*$len;

//$img1 = ImageCreateTrueColor($width,20);

header("content-type:image/png");//也可以是jpeg,或png

$n = rand(1,5);

$type =rand(1,2);

if($type == 1){

$img1 = imageCreateFromgif("./web/back/images/captcha_bg{$n}.gif");

}

else{

$img1 = imageCreateFromjpeg("./web/back/images/captcha_bg{$n}.jpg");

}

$this->width = imagesx($img1);

$this->height = imagesy($img1);

$color2 = ImageColorAllocate($img1, rand(0,255),rand(0,255),rand(0,255));

$this->AddGanrao($img1, $color2);//画干扰线

$validCode = $this->getValidCode();//获得字符

imagestring($img1, 10, 40,3, $validCode, $color2);//写字符

//下面这个函数是重点!!!!!!!!!!!!

ob_clean();

ImagePng($img1);

imagedestroy($img1);

return $validCode;

}

//添加干扰 点 线

private function AddGanrao($img, $color){

//添加6个干扰线

for($i = 1; $i 

$x1 = rand(0,$this->width-1);

$y1 = rand(0,$this->height-1);

$x2 = rand(0,$this->width-1);

$y2 = rand(0,$this->height-1);

imageLine($img, $x1,$y1, $x2, $y2, $color);

}

}

private function getValidCode(){

$arr=array("+","-","*");

$num1=rand(1000,9999);

$oper=$arr[rand(1,4)];

$num2=rand(1000,9999);

$str1=$num1.$oper.$num2;

switch($oper){

case "+":

$_SESSION['code'] = $num1+$num2;    //存入session中,以备登录验证时使用!

break;

case "-":

$_SESSION['code'] = $num1-$num2;    //存入session中,以备登录验证时使用!

break;

case "*":

$_SESSION['code'] = $num1*$num2;    //存入session中,以备登录验证时使用!

break;

}

return $str1;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值