php中验证码图像输出不了,使用ob_clean()解决
程序员文章站
2024-02-19 14:57:04
...
以下是一个还算可以的验证码类:
<?php
namespace Frame\Vendor;
class Verify
{
private $x=80;
private $y=30;
private $img=null;
private $str='';
public function show()
{
$this->x=80;
$this->y=30;
$this->ini1();
$this->rangshu();
$this->printhua();
}
private function ini1()
{
$this->img=imagecreatetruecolor($this->x,$this->y);
$color1=imagecolorallocate($this->img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imagefill($this->img,0,0,$color1);
}
private function rangshu()
{
$color2=imagecolorallocate($this->img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
$color3=imagecolorallocate($this->img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
//随机产生四位数的字符串
$arr1=range('0','9');
$arr2=range('a','z');
$arr3=range('A','Z');
$arr=array_merge($arr1,$arr2,$arr3);
shuffle($arr);
$str2='';
$str1=array_rand($arr,4);
foreach ($str1 as $value)
{
$this->str.=$arr[$value];
}
echo $this->str;
$_SESSION['verify']=$this->str;
//的到四位数后旧才是化矩形填充
imagefilledrectangle($this->img,0,0,$this->x,$this->y,$color2);
//填加字符串
$filename=INDEX_PATH."Public".DS."Admin".DS."Images".DS."msyhbd.ttf";
imagettftext($this->img,18,0,8,25,$color3,$filename,$this->str);
}
public function printhua()
{
for($i=0;$i<150;$i++)
{
$color4=imagecolorallocate($this->img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imagesetpixel($this->img,mt_rand(0,$this->x),mt_rand(0,$this->y),$color4);
}
for($i=0;$i<10;$i++)
{
$color4=imagecolorallocate($this->img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imageline($this->img,mt_rand(0,$this->x),mt_rand(0,$this->y), mt_rand(0,$this->x), mt_rand(0,$this->y),$color4);
}
//在输出钱要告诉浏览器这个格式
//header("Content-type:image/png");
ob_clean();//清除缓存
header('Content-type:image/png');
imagepng($this->img);
//print_r($this->img);
}
}
在此过程给,我的验证码这个图像不能以图像的方式输出,尽管我没有任何错误,也设置 了header(‘Content-type:image/png’);
但是我在header(‘Content-type:image/png’);前加个ob_clean();就可以进行输出了,这是为什么呢?
首先我来讲以下ob_clean()是用来干什么的吧!
ob_clean()是用来清楚缓存的
数据的输出输入首先要先进入缓存,当缓存没有满时是不会自动进行删除,在此时你在输出验证码图像,他会把你缓存中的数据误认为是验证码图片,所以就会一起输出,造成验证码无法输出的结局
上一篇: Oracle集合查询
下一篇: mysql8新建用户并授权