PHP 生成验证码(+图片没有显示的解决办法)
2018-08-21 05:40:06来源:博客园 阅读 ()
今天有需要用到验证码,就敲了个,毕竟用途比较广,所以打算把代码留下来,以后肯定用得上的。当然,今天在做的时候也是有一些问题的,分享出来吧,记录自己所犯的错误,避免以后再掉坑里。
先给个效果图(下面的真的是图):
再上完整的代码吧:
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() 并不能解决所有的不能显示的问题,具体问题具体分析,视自己的情况而定。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:PHP基础
- PHP写UltraEdit插件脚本实现方法 2020-03-29
- php 带逗号千位符数字的处理方法 2020-03-28
- PHP三元运算符的结合性介绍 2020-03-28
- PHP静态延迟绑定和普通静态效率的对比 2020-03-28
- 基于php流程控制语句和循环控制语句 2020-03-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash