PHP 生成验证码(+图片没有显示的解决办法)

今天有需要用到验证码,就敲了个,毕竟用途比较广,所以打算把代码留下来,以后肯定用得上的。当然,今天在做的时候也是有一些问题的,分享出来吧,记录自己所犯的错误,避免以后再掉坑里。

先给个效果图(下面的真的是图):

再上完整的代码吧:

 1 <?php
 2     // 开启 session
 3     session_start();
 4
 5     // 丢弃输出缓冲区的内容 **
 6     ob_clean();
 7
 8     // 1 创建画布
 9     $img = imagecreatetruecolor(100, 30);
10
11     // 2 画一个矩形并填充
12     $bgcolor = imagecolorallocate($img, mt_rand(120,255), mt_rand(120,255), mt_rand(120,255));
13     imagefilledrectangle($img, 0, 0, 100, 30, $bgcolor);
14
15     // 3 在画布上进行操作
16
17     // 3.1 定义字符串
18     $str = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890‘;
19
20     // 3.2 定义变量,存放验证码
21     $code = ‘‘;
22
23     // 3.2 加载自定义字体
24     $font_file = ‘./comic.ttf‘;
25
26     // 3.3 生成文字部分
27     for ($i = 0; $i < 4; $i++) {
28         // 定义字体颜色
29         $fontcolor = imagecolorallocate($img, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
30
31         // 文字内容
32         $content = substr($str, mt_rand(0, strlen($str)-1), 1);
33
34         // 设置显示坐标
35         $x = ($i * 100 / 4) + mt_rand(5, 10);
36         $y = mt_rand(17, 22);
37
38         // 把文字填充到画布
39         imagefttext($img, 15, mt_rand(-5, 5), $x, $y, $fontcolor, $font_file, $content);
40
41         // 将文字内容赋值给 code 变量
42         $code .= $content;
43     }
44
45     // 3.4 将大写字母转换为小写
46     $code = strtolower($code);
47
48     // 3.5 给 session 赋值
49     $_SESSION[‘code‘] = $code;
50
51     // 3.6 设置干扰元素
52     for ($i = 0; $i < 200; $i++) {
53         $pointcolor = imagecolorallocate($img, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
54         imagesetpixel($img, mt_rand(1, 99), mt_rand(1, 29), $pointcolor);
55     }
56
57     // 3.7 设置干扰线
58     for ($i = 0; $i < 3; $i++) {
59         $linecolor = imagecolorallocate($img, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
60         imageline($img, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29), $pointcolor);
61     }
62
63     // 4 向浏览器输出图片头信息
64     header(‘Content-Type:image/png‘);
65
66     // 5 输出图片到浏览器
67     imagepng($img);
68
69     // 6 销毁图片
70     imagedestroy($img);
71 ?>

遇到的一个比较严重的问题,也就是我没能独立解决的,就是 ob_clean() 那里(注释上加了俩 * 呢),最初是没有这行代码的。当然,现象就是怎么都刷不出图,看了手册也没找到解决办法,最后还是依赖了度娘,找到了上面的解决办法。(万能的度娘,请收下我的膝盖)

自我感觉注释还是比较详细的吧,反正我看得懂(马马虎虎)。

当然,ob_clean() 并不能解决所有的不能显示的问题,具体问题具体分析,视自己的情况而定。

原文地址:https://www.cnblogs.com/Super-Lee/p/9502058.html

时间: 2024-10-11 05:53:53

PHP 生成验证码(+图片没有显示的解决办法)的相关文章

ecshop验证码图片无法显示终极解决办法

ecshop验证码图片无法显示终极解决办法 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2014-06-06 客户在安装好ecshop之后所有前台的证码不显示,后台可以显示,ECSHOP开发中心总结了解决办法分享给各位朋友. 可以在后台有,前台不显示 打开includes/init.php文件,将如下这段代码屏蔽即可. /* 判断是否支持 Gzip 模式 */if (!defined(‘INIT_NO_SMARTY’) && gzip_enabled())

dedecms织梦系统后台验证码图片不显示的解决方法

网站迁移后,dedecms织梦系统后台验证码图片不显示的解决方法通用解决方案-取消后台验证码功能因为没有验证码,不能进后台,所以修改php文件源代码:方法一:打开dede/login.php 找到如下代码    if(($validate=='' || $validate != $svali) && preg_match("/6/",$safe_gdopen)){        ResetVdValue();        ShowMsg('验证码不正确!','logi

如何解决php 生成验证码图片不显示问题

最近遇到一个问题,就是验证码在别人的电脑上可以显示,但是我自己的电脑上去不能.原因找了好久,哈哈,终于找到了!现在给大家分享一下: 程序: <?php $w = 80; //设置图片宽和高 $h = 26; $str = Array(); //用来存储随机码 $string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//随机挑选其中4个字符,也可以选择更多,注意循环的时候加上,宽度适当调整 for($i = 0;$i < 4;$i++

PHP网站验证码图片不显示解决方法

找到php.ini配置文件之后,双击打开,hp_gd2.dll,找到如下图1-2所示.查看extension=php_gd2.dll前面是否有;号,如果有的话,去除,保存.编者注:如果php.ini是在系统目录下的话,保存之后重起电脑才生效,如果是系统变量里直接指定的话,重起IIS服务器或者重起apache服务器即可生效(不用重起服务器电脑). 如果找不到php.ini文件,在别的电脑拷贝一个即可. PHP网站验证码图片不显示解决方法

SpringMVC生成的验证码图片不显示

近期用SSM框架写一个项目,登录模块需要生成验证码图片,我把相关的代码写好了之后传到 jsp ,但是图片不显示,查看控制台显示404,反复查询了一下代码并没有发现任何问题,代码如下: @Controller public class ValidateCodeController { private static final long serialVersionUID = 1L; private static int WIDTH = 70; // 验证码图片的宽度 private static i

第二百七十节,Tornado框架-生成验证码图片,以及验证码结合Session验证

Tornado框架-生成验证码图片,以及验证码结合Session验证 第一.生成验证码图片  生成验证码图片需要两个必须模块 1.python自带的random(随机模块) 2.Pillow()图像处理模块里的PIL(图像库),为第三方模块,需要安装 封装验证码图片生成插件py 在封装文件里先导入random(随机模块),和Pillow()图像处理模块里的所需py文件 封装验证码图片生成插件功能,调用后返回验证码图片,和字符串类型验证码,两个返回值 注意:验证码需要一个字体文件,这个字体文件必须

javaweb学习总结(九)—— 通过Servlet生成验证码图片

一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下: 创建一个DrawImage Servlet,用来生成验证码图片 1 package gacl.response.study; 2 import java.awt.Color; 3 import java.awt.Font; 4 import java.awt.Graphics; 5 import java.awt.Graphics2D; 6 import java.awt.image.Buff

用python生成验证码图片

除了配置好的python环境外,还需要配有python中的PIL库,这是python中专门用来处理图片的库.用传统的pip install 方法或者下载源码 python setup.py install 方法安装该库,很可能会报错(视运行环境不同).可以采用以下方法: 1.下载安装包URL:http://www.pythonware.com/products/pil/index.htm,要下载支持全平台的. 2.解压缩: tar –zxv –f Imaging-1.1.7.tar.gz 3.进

Python Show-Me-the-Code 第 0010 题 生成验证码图片

第 0010 题:使用 Python 生成类似于下图中的字母验证码图片 阅读资料 思路:先随机生成验证码,然后用Python的PIL库画出这个激活码的图片,具体点就是创建画布,加验证码的字上去,增加噪点进行干扰,再进行模糊处理,接着保存到名字为验证码的图片中. 0010.生成验证码图片.py #!/usr/bin/env python #coding: utf-8 import Image, ImageDraw, ImageFont, ImageFilter import string, ran