效果如图:
文件都放到了同一文件夹下。
************************************容易出现的问题*************
1.未开启php_gd2.dll 去php.ini将其前面的“ ;”去掉
2.上面的checks.php中<?前面有空格或者内容
3.字符编码改为统一的
4.最容易忽略的一点:
5.如果copy代码到你的项目中图片显示为×,检查你的checks.php放置路径
你本机上的环境是将报错提示全部打开的,所以在输出时有系统的未定义提示信息也跟着一起输出了,这样生成的图片肯定就不正常了,方法有两,在ValidationCode.php和checks.php文件开头加上ini_set('display_errors', 'Off'); 就ok了
**********************************************************
CreateImage.class.php
<?php class ValidationCode { private $width,$height,$codenum; public $checkcode; //产生的验证码 private $checkimage; //验证码图片 private $disturbColor = ''; //干扰像素 function __construct($width='80',$height='20',$codenum='4') { $this->width=$width; $this->height=$height; $this->codenum=$codenum; } function outImg() { //输出头 $this->outFileHeader(); //产生验证码 $this->createCode(); //产生图片 $this->createImage(); //设置干扰像素 $this->setDisturbColor(); //往图片上写验证码 $this->writeCheckCodeToImage(); imagepng($this->checkimage); imagedestroy($this->checkimage); } private function outFileHeader() { header ('Content-type: image/png'); } private function createCode() { $this->checkcode = strtoupper(substr(md5(rand()),0,$this->codenum)); } private function createImage() { $this->checkimage = @imagecreate($this->width,$this->height); $back = imagecolorallocate($this->checkimage,255,255,255); $border = imagecolorallocate($this->checkimage,0,0,0); imagefilledrectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$back); // 白色底 imagerectangle($this->checkimage,0,0,$this->width - 1,$this->height - 1,$border); // 黑色边框 } private function setDisturbColor() { for ($i=0;$i<=200;$i++) { $this->disturbColor = imagecolorallocate($this->checkimage, rand(0,255), rand(0,255), rand(0,255)); imagesetpixel($this->checkimage,rand(2,128),rand(2,38),$this->disturbColor); } } private function writeCheckCodeToImage() { for ($i=0;$i<=$this->codenum;$i++) { $bg_color = imagecolorallocate ($this->checkimage, rand(0,255), rand(0,128), rand(0,255)); $x = floor($this->width/$this->codenum)*$i; $y = rand(0,$this->height-15); imagechar ($this->checkimage, rand(5,8), $x, $y, $this->checkcode[$i], $bg_color); } } function __destruct() { unset($this->width,$this->height,$this->codenum); } }
checks.php
<?php ini_set('display_errors','off'); session_start(); header("content-type:image/png"); //设置创建图像的格式 $image_width=70; //设置图像宽度 $image_height=18; //设置图像高度 srand(microtime()*100000); //设置随机数的种子 for($i=0;$i<4;$i++){ //循环输出一个4位的随机数 $new_number.=dechex(rand(0,15)); } $_SESSION[check_checks]=$new_number; //将获取的随机数验证码写入到SESSION变量中 $num_image=imagecreate($image_width,$image_height); //创建一个画布 imagecolorallocate($num_image,255,255,255); //设置画布的颜色 for($i=0;$i<strlen($_SESSION[check_checks]);$i++){ //循环读取SESSION变量中的验证码 $font=mt_rand(3,5); //设置随机的字体 $x=mt_rand(1,8)+$image_width*$i/4; //设置随机字符所在位置的X坐标 $y=mt_rand(1,$image_height/4); //设置随机字符所在位置的Y坐标 $color=imagecolorallocate($num_image,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200)); //设置字符的颜色 imagestring($num_image,$font,$x,$y,$_SESSION[check_checks][$i],$color); //水平输出字符 } imagepng($num_image); //生成PNG格式的图像 imagedestroy($num_image); //释放图像资源 ?>
index.php
<?php header("content-type:text/html; charset=utf-8"); session_start(); if(!empty($_POST["Submit"])){ $checks=$_POST["checks"]; if($checks==""){ echo "<script> alert('验证码不能为空');window.location.href='index.php';</script>"; } if($checks==$_SESSION[check_checks]){ echo "<script> alert('用户登录成功!');window.location.href='index.php';</script>"; }else{ echo "<script> alert('您输入的验证码不正确!');window.location.href='index.php';</script>"; } } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>rand函数的应用</title> <style type="text/css"> <!-- .STYLE1 { font-size: 12px; color: #FFFFFF; font-weight: bold; } .style2 {font-weight: bold; font-size: 12px;} --> </style> </head> <body> <form name="form" method="post" action=""> <input type="hidden" name="Submit" id="Submit" value="1" /> <table width="1003" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="168" height="169" background="images/index_01.gif"> </td> <td width="685" background="images/index_02.gif"> </td> <td width="150" background="images/index_03.gif"> </td> </tr> <tr> <td width="168" height="311" background="images/index_04.gif"> </td> <td background="images/index_05.gif"><table width="675" height="169" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="43" align="center" valign="baseline"> </td> <td align="center" valign="middle"> </td> <td align="center" valign="baseline"> </td> </tr> <tr> <td width="382" height="24" align="center" valign="baseline"> </td> <td width="207" height="24" valign="middle"><span class="style2">用户名</span><span class="STYLE1"> <input name="txt_user" id="txt_user" style="height:20px " size="10"> </span></td> <td width="86" height="24" align="center" valign="baseline"> </td> </tr> <tr> <td height="24" align="center" valign="baseline"> </td> <td height="24" valign="middle"><span class="style2">密码</span><span class="STYLE1"> <input name="txt_pwd" type="password" id="txt_pwd" style="FONT-SIZE: 9pt; height:20px" size="10"> </span></td> <td height="24" align="center" valign="baseline"> </td> </tr> <tr> <td height="24" align="center" valign="baseline"> </td> <td height="24" valign="middle"><span class="style2">验证码</span><span class="STYLE1"> <input name="checks" size="6" style="height:20px "> <img src="./checks.php" width="70" height="18" border="0" align="bottom"></span> </td> <td height="24" align="center" valign="baseline"> </td> </tr> <tr> <td height="40" align="center" valign="baseline"> </td> <td align="center" valign="baseline"> <input type="submit" id="Submit" name="Submit" value="登录" /></td> <td align="center" valign="baseline"> </td> </tr> </table></td> <td background="images/index_06.gif"> </td> </tr> <tr> <td height="100"> </td> <td> </td> <td> </td> </tr> </table> </form> </body> </html>
相关推荐
验证码需要GD库支持才能正常显示。如果发现后台登录页面的验证码区域为空白或者显示异常,则可能是服务器环境未开启GD库。 **解决方案:** 1. **检查GD库是否已启用:** - 登录服务器,查看PHP配置文件(`php.ini`)...
3. **文件大小限制**:IIS对上传文件大小有默认限制,当验证码图片或其生成脚本超过这一限制时,就无法正常显示。 4. **PHP扩展问题**:如果使用PHP生成验证码,可能需要确保GD库已正确加载。 ### 解决方案 #### ...
如果用户的浏览器禁用了JavaScript,验证码可能无法正常显示。确保浏览器的JavaScript功能是启用状态。 3. **服务器配置问题**:验证码图片可能是由服务器动态生成的,服务器配置错误(如PHP设置、GD库未启用)可能...
然而,这一方法在实际应用中往往效果有限,对于许多用户而言,并不能根本解决验证码的显示异常。 ### 三、深入解决方案——模板与程序修改 #### 1. 模板修改 为了彻底解决验证码显示问题,可以采取更深入的修改...
5. **验证结果**:现在再次尝试访问包含验证码的页面,如果问题已解决,你应该能看到正常显示的验证码。 在某些情况下,除了GD库的问题,还可能存在其他原因导致验证码不显示,例如: - **权限问题**:确保Web...
在开发使用ThinkPHP框架的Web应用程序时,有时会遇到验证码无法正常显示的问题。这个问题可能是由于多种原因导致的,本文将详细介绍解决这一问题的方法。 首先,要确保服务器环境配置正确。通常,在PHP的配置文件...
通过上述知识点的详细说明,现在你应该对PHP伪静态验证码不显示的问题有了更深入的理解,并掌握了相应的解决方法。在实际应用中,应首先确保PHP环境正常,然后检查gd库是否加载,最后解决编码问题。这样一般情况下就...
加法验证码是一种常见的防止自动化程序(如机器人)非法提交表单的安全机制,它通常...在PHP中实现这样的验证码,需要结合HTML、PHP以及可能的图像处理技术,确保既能有效防止恶意攻击,又不会对正常用户造成太大困扰。
在使用ThinkPHP、Onethink和ThinkOx等PHP框架时,有时可能会遇到验证码不显示的问题,这可能是由于多种原因导致的。下面将详细探讨这个问题,并提供相应的解决方法。 首先,验证码不显示可能与编码问题有关。UTF-8...
7. **检查效果**:完成上述步骤后,退出并重新登录,查看验证码是否正常显示。如果问题得到解决,那么恭喜你已经成功修复了验证码不显示的问题。如果问题依然存在,可能需要检查其他可能的原因,如服务器环境、PHP...
4. 响应式设计:确保验证码在不同设备和屏幕尺寸下可正常显示。 总的来说,这个PHP验证码系统是一个基础但实用的解决方案,它提供了基本的防机器人功能,并允许开发者自定义视觉效果以适应网站风格。然而,对于高...
7. **响应式设计**:考虑到不同设备和屏幕尺寸,滑动验证码可能需要具备响应式布局,确保在手机、平板和桌面电脑上都能正常显示和操作。 8. **用户体验**:滑动验证码相比传统的输入文本验证码,用户体验更好,因为...
这样,即使在生成验证码的过程中有任何意外的输出,也能确保图像能够正常显示。 总之,当遇到“图像因其本身有错无法显示”的问题时,应检查代码中的空格和换行符,并确保在输出图像之前调用了`ob_clean()`清理缓冲...
"php验证码源码"的标题和描述揭示了这个压缩包包含了一个中级水平的PHP验证码实现,该实现增加了更复杂的功能,如二值化去杂点处理,解决字符粘连问题,以及识别旋转字符。 一、验证码的基本原理 验证码的主要目的...
验证码是Web应用中常用...通过检查和修改这些点,可以确保验证码正常显示。在遇到此类问题时,按照上述步骤排查和修复,通常能够解决问题。同时,持续学习和关注PHP验证码的最新最佳实践,对于提升网站安全性至关重要。