你看见我的名字了吗 2023-03-11 17:43 采纳率: 0%
浏览 25

php生成验证码失败

PHP产生一个验证码,但是只能生成一个灰色方块,不论是修改画布颜色还是添加文字都无法实现。以下是源码和测试结果:

<?php
header('Content-type:text/html;charset=utf-8');
ob_clean();
//生成验证码
//1、创建验证码画布
$img_w = 100;  //验证码的宽度
$img_h = 30;   //验证码的高度
$img = @imagecreatetruecolor($img_w, $img_h)         //创建画布
    or die("1") ;
$bg_color = @imagecolorallocate($img,0xcc,0xcc,0xcc) //画布颜色
    or die("2") ;
echo("backgound color is $bg_color
"
); @imagefill($img,0,0,$bg_color) //背景色 or die("3"); //生成验证码文本 $count = 4; //验证码位数 $charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; //随机因子 $charset_len = strlen($charset)-1 ;//最大索引值。(下标)可以换作strlen($charset)-1 $code = ''; //保存生成的验证码 for($i=0; $i<$count; $i++) { //通过索引取出字符,mt_rand()用于获取指定范围内的随机数 $code .= $charset[mt_rand(0,$charset_len)]; } //echo ("code is $code\t
"
); //3、将生成的文本保存到Session中 session_start();//启动session $_SESSION['captcha'] = $code; //4、在画布中绘制验证码文本 $fontSize = 16; //文字大小 $fontStyle = 'simhei.ttf'; //字体样式 for($i=0; $i<$count; ++$i){ //随机生成字体颜色 $fontColor = @imagecolorallocate($img,mt_rand(0,100),mt_rand(0,50),mt_rand(0,255)) or die("4"); echo("fontcolor$i is $fontColor
"
); //数组imagettftext(资源$image,float $size,float $angle int $x,int $y,int $color,string $fontfile,string $text) @imagettftext($img, $fontSize, mt_rand(0,50) - mt_rand(0,25), $fontSize*$i+20,mt_rand($img_h/2,$img_h), $fontColor, $fontStyle,$code[$i]) or die("5"); } //5、为验证码图片生成彩色噪点、干扰线 for($i=0; $i<100; ++$i){ //随机生成颜色 $color = @imagecolorallocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)) or die("6") ; //随机绘制干扰点 @imagesetpixel($img,mt_rand(0,$img_w),mt_rand(0,$img_h),$color) or die("7") ; //随机绘制干扰线 if($i % 20 ==0) imageline($img,mt_rand(0,$img_w),0,mt_rand(0,$img_h*5),$img_h,$color); } @header('Content-Type:image/gif') //声明要发送(也就是浏览器要展现)的文件类型 or die("8"); @imagegif($img) or die("9"); imagedestroy($img); ?>

尝试修改函数imagecolorallocate的参数还是一直显示这样的图片:

img


(经过放大了的)

不过这是在把“在画布中绘制验证码文本”这一步注释掉之后才得到的,如果没有将其注释掉,我只能看到一个报错:

img

换句话说,写入文本这一步也不能进行。 另外,代码也不存在路径问题,即写文本的函数并不是因为找不到.ttf文件而报错的。并且gd也是正常打开的
还请各位帮我看看,究竟问题出在哪??

  • 写回答

2条回答 默认 最新

  • 以山河作礼。 新星计划导师 2023-03-11 18:24
    关注

    该回答引用gpt:
    可能是因为您的PHP程序中没有正确配置GD库或者GD库没有启用导致的。GD库是PHP的一个扩展库,用于在PHP中生成图像,包括验证码图片。如果GD库没有正确配置或者启用,就无法生成正确的验证码图片。

    以下是一些可能的解决方案:

    1. 检查PHP是否已经安装了GD库,可以通过在PHP代码中调用phpinfo()函数来查看。在phpinfo()函数的输出信息中,可以搜索gd库相关的信息,如果没有相关信息,就需要安装gd库。

    2. 如果已经安装了GD库,但是没有启用,可以通过修改php.ini文件来启用gd库。在php.ini文件中,找到以下两行代码:

    ;extension=gd.so
    ;extension=gd2.so
    

    将其修改为:

    extension=gd.so
    extension=gd2.so
    

    然后重启Web服务器,使修改生效。

    1. 如果GD库已经安装和启用,但是验证码图片还是无法正确生成,可以尝试修改PHP代码。例如,可以尝试修改画布颜色的代码,确保颜色值是正确的。可以使用imagecolorallocate()函数来创建一个颜色对象,例如:
    $bg_color = imagecolorallocate($img, 255, 255, 255); // 创建一个白色的颜色对象
    

    然后使用imagefill()函数将画布填充为指定颜色:

    imagefill($img, 0, 0, $bg_color); // 使用$bg_color填充画布
    

    类似地,可以使用imagecolorallocate()函数创建一个颜色对象,然后使用imagettftext()函数在画布上绘制验证码文本。

    如果以上解决方案都无法解决问题,建议您联系PHP的技术支持或售后服务寻求帮助。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月11日

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络