php图像存在错误显示不出来

<?phpclassvalidateCode{private$charset='abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ234... <?php
class validateCode{
private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789'; //随机因子
private $code; //验证码
private $codelen=4; //验证码长度
private $width=130;
private $height=50;
private $img;
//生成验证码
private function createCode(){
$_len=strlen($this->charset);
for ($i=0;$i<$this->codelen;$i++){
$this->code.=$this->charset[mt_rand(0, $_len)];
}
return $this->code;
}
private function createBG(){
$this->img = imagecreatetruecolor($this->width, $this->height);
$color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
}
private function outPut(){
ob_clean();
Header('Content-type:image/png');
imagepng($this->img);
imagedestroy($this->img);
}
public function doimg(){

//$this->createCode();
$this->outPut();
}

}

test.php
require_once 'includes/validateCode.class.php';
$validate=new validateCode();
$validate->doimg();
//echo '<img src="'.$validate->doimg().'" />';这个没用
如果屏蔽掉require就找不到验证类 明明就设置了自动载入 其他类可以 为什么这个类无法载入
展开
 我来答
windblast
2015-04-08 · 知道合伙人软件行家
windblast
知道合伙人软件行家
采纳数:5633 获赞数:13624
毕业于空军第一航空学院电子专业,1991年开始接触电脑,从事多年计算机编程,具有较丰富的经验。

向TA提问 私信TA
展开全部

看了代码后,有以下提示供参考:


1、从代码中,没有看到输出验证字符图像的代码。


2、建议编写类代码时,添加一个__construct构造函数,用于对上面的 $img 等重要参数进行初始化。


3、代码中生成验证字符的代码有些bug,会造成输出字符不足4个:


$this->code.=$this->charset[mt_rand(0, $_len)];


修正:


$this->code.=$this->charset[mt_rand(0, $_len-1)];


运行结果图:



附修改后示例代码,供参考:




追问
为什么图像无法显示出来 还没做验证码呢 只是输出背景的图像就无法显示出来
追答

请细查以下代码,看缺失什么:

	private function outPut(){
ob_clean();
Header('Content-type:image/png');
imagepng($this->img);
imagedestroy($this->img);
}
public function doimg(){

//$this->createCode();
$this->outPut();
}

你看到有调用 createBG() 的吗?

圣鸾OJ
2015-09-29 · TA获得超过1629个赞
知道小有建树答主
回答量:1136
采纳率:96%
帮助的人:114万
展开全部
<?php
class validateCode{
private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789'; //随机因子
private $code; //验证码
private $codelen=4; //验证码长度
private $width=130;
private $height=50;
private $img;
//生成验证码
private function createCode(){
$_len=strlen($this->charset);
for ($i=0;$i<$this->codelen;$i++){
$this->code.=$this->charset[mt_rand(0, $_len-1)];
}
return $this->code;
}

private function createBG(){
//画布
$this->img = imagecreatetruecolor($this->width, $this->height);
$color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
imagefilledrectangle($this->img,0,0,$this->width,$this->height,$color);

$black = imagecolorallocate($this->img, mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120));
$strx = rand(20, 8);
for ($i = 0; $i < $this->codelen; $i++) {
$strpos = rand(1, 6);
imagestring($this->img, 5, $strx, $strpos, substr($this->createCode(), $i, 1), $black);
$strx += rand(8, 14);
}

return $this->img;
}

private function outPut(){
ob_clean();
Header('Content-type:image/png');
imagepng($this->createBG());
imagedestroy($this->createBG());
}

public function doimg(){
$this->outPut();
}

}

$validate=new validateCode();
echo $validate->doimg();/

?>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
245880790
2015-04-08 · 超过34用户采纳过TA的回答
知道答主
回答量:54
采纳率:100%
帮助的人:44.3万
展开全部
<?php
class validateCode{
private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789'; //随机因子
private $code; //验证码
private $codelen=4; //验证码长度
private $width=130;
private $height=50;
private $img;
//生成验证码
private function createCode(){
$_len=strlen($this->charset);
for ($i=0;$i<$this->codelen;$i++){
$this->code.=$this->charset[mt_rand(0, $_len-1)];
}
return $this->code;
}

private function createBG(){
//画布
$this->img = imagecreatetruecolor($this->width, $this->height);
$color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
imagefilledrectangle($this->img,0,0,$this->width,$this->height,$color);

$black = imagecolorallocate($this->img, mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120));
$strx = rand(20, 8);
for ($i = 0; $i < $this->codelen; $i++) {
$strpos = rand(1, 6);
imagestring($this->img, 5, $strx, $strpos, substr($this->createCode(), $i, 1), $black);
$strx += rand(8, 14);
}

return $this->img;
}

private function outPut(){
ob_clean();
Header('Content-type:image/png');
imagepng($this->createBG());
imagedestroy($this->createBG());
}

public function doimg(){
$this->outPut();
}

}

$validate=new validateCode();
echo $validate->doimg();/

?>
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式