php 证码不显示,PHP 验证码不显示问题

描述你的问题 GD库已经打开,搜索看了其他朋友的解决办法:清除BOM、ob_clean()、代码起始位置不换行还是不显示。

贴上相关代码<?php

session_start();

//创建随机验证码

for ($i=0;$i<4;$i++){

$_nmsg .= dechex(mt_rand(0,15));

}

//随机码保存在session

$_SESSION['code']=$_nmsg;

//长高

$_width = 75;

$_height = 25;

//创建图像

$_img = imagecreatetruecolor($_width,$_height);

//

$_white = imagecolorallocate($_img,255,255,255);

//填充

imagefill($_img,0,0,$_white);

//黑色边框

$_black = imagecolorallocate($_img,0,0,0);

imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);

//随机下划线

for($i=0;$i<6;$i++){

$_rnd_color = imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255),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);

}

//输出图像

header('Content-Type:image/png');

imagepng($_img);

//删除图像

imagedestroy($_img);

?>

经过测试,你的代码问题在这里:

在实现随机下划线的时候,imagecolorallocate这个函数传入的参数不对,应该给予4个params,现在的代码给了6个参数。

结果:修改后,验证码显示没有问题,可以正常输出。

这里的imagecolorallocate应该是传4个参数 还有没看懂你上面

bVsK9a

这一点没明白你的意思是要干啥下面也看到调用的地方 注释之后

bVsK9o

结果是这个

bVsK9r

查看error log,再判断

header(‘Content-Type:image/png’);

要从其他地方查看,从framework所有的文件进行DOM头排查

你先试试复制一些网上成功的代码试试看,如果能成功那么就是你代码的问题,不然就应该是环境的问题。

是不是没安装GD?检查phpinfo()

在header()前清理输出缓冲区,

ob_clean()

header('Content-Type:image/png');

imagepng($_img);

最终生成的验证码是酱紫,

bVtSan

那么问题来了,

1、为什么

ob_clean()

要加在

imagepng()

之前?

显然,

header()

之前的代码都不会被缓存到ob,真正缓存到ob的是

imagepng()

生成的验证码,当你在浏览器刷新时,

ob_clean()

会为你清除前一次保存在ob的验证码。然后

imagepng()

再次生成验证码保存到ob,ob随后丢到程序缓存打包到浏览器。

2、假如没有

ob_clean()

,按理说也会生成一张验证码,验证码跑到哪里了?

请使用php5.4以下版本或者关闭ob。

Ps:php5.3之后,

ob_start()

默认开启,重复添加

ob_start()

会导致

ob_end_*()

失效。(Oops..在本地编辑代码ob_start重复则出错,然而看到某个上传类却能完好运行。谁知道请详解一下。)

先谢谢帮修改代码高亮的朋友,改了几次高亮都不行,第一次用。回去试试。

清除缓存还是不行?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值