qq_57931996 2023-04-28 11:43 采纳率: 88.9%
浏览 25
已结题

PHP生成图形验证码图片不显示

PHP生成图形验证码图片不显示
gd已打开,ob_clean()也用了
主要问题应该在code.php不能正确的输出图片

img

img



<?php
ob_clean();         //丢弃输出缓存区中的内容
header("Content-type:image/jpeg");      //以jpeg格式输出,注意上面不能输出任何字符,否则出错
$w = 2000;        //设置图片宽和高
$h = 34;
$str = Array(); //用来存储随机码
$string = "abcdefghijklmnopqrstuvwsyz0123456789";   //随机挑选其中4个字符,也可以选择更多,注意循环的时候加上,宽度适当调整
for ($i = 0;$i < 4;$i++){
    $str[$i] = $string[rand(0,35)];
    $vcode .= $str[$i]; 
}
session_start();    //启用超全局变量session
$_SESSION["vcode"] = $vcode;
$im = imagecreatetruecolor($w,$h);
$white = imagecolorallocate($im,255,255,255);   //第一次调用设置背景色
$black = imagecolorallocate($im,0,0,0);         //边框颜色
imagefilledrectangle($im,0,0,$w,$h,$white);              //画一矩形填充
imagerectangle($im,0,0,$w-1,$h-1,$black);        //画一矩形框
//生成雪花背景
for ($i = 1;$i <200;$i++){
    $x = mt_rand(1,$w-9);
    $y = mt_rand(1,$h-9);
    $color = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
    imagechar($im,1,$x,$y,"*",$color);
}
//将验证码写入图案
for ($i = 0;$i < count($str);$i++){
    $x = 13 + $i * ($w-15)/4;
    $y = mt_rand(3,$h / 3);
    $color = imagecolorallocate($im,mt_rand(0,225),mt_rand(0,150),mt_rand(0,225));
    imagechar($im,5,$x,$y,$str[$i],$color);
}
imagejpeg($im);
imagedestroy($im);
?>

 <tr>
                    <td class="you">验证码<span> *</span></td>
                    <td class="zuo">
                        <div style="float: left;"><input type="text" name="code" style="width: 100px;"></div>
                        <div style="float: left;margin-left: 10px;"><img src="code.php" id="checkpic" onclick="changing();"/></div>
                    </td>
   </tr>
<script>
    function changing(){
        //点击图片,会再次执行code.php文件,后面的参数是防止静态页面缓存导致不能更换
        document.getElementById('checkpic').src="code.php?"+Math.random();
    }
</script>

  • 写回答

3条回答 默认 最新

  • CSDN专家-showbo 2023-04-28 13:04
    关注

    $vcode变量没定义

    img

    在for上面添加$vcode变量的定义,而且width是不是搞错了。2000px长度,200px吧

    ob_clean();         //丢弃输出缓存区中的内容
    header("Content-type:image/jpeg");      //以jpeg格式输出,注意上面不能输出任何字符,否则出错
    $w = 200;        //设置图片宽和高///////////////////////////////////
    $h = 34;
    $str = Array(); //用来存储随机码
    $string = "abcdefghijklmnopqrstuvwsyz0123456789";   //随机挑选其中4个字符,也可以选择更多,注意循环的时候加上,宽度适当调整
    $vcode="";///////////////////////////////////
    
    for ($i = 0;$i < 4;$i++){
        $str[$i] = $string[rand(0,35)];
        $vcode .= $str[$i]; 
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月6日
  • 已采纳回答 4月28日
  • 修改了问题 4月28日
  • 创建了问题 4月28日

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价