仓酷云

标题: PHP网页设计还算功效对照全的PHP验证码类 [打印本页]

作者: 仓酷云    时间: 2015-2-3 23:29
标题: PHP网页设计还算功效对照全的PHP验证码类
终于学会把表单的数据插入数据库,然后显示出来了,应该说一个程序的雏形已经诞生了。     
  看到PHP100视频34讲写的php验证码类,撑持自界说图片巨细、字符个数、字符类型、字符巨细、图片类型、汉字验证码、搅扰线等,正文具体
  字体文件是微软雅黑,和验证码文件同目次,文件名msyh.ttf,可以从C:\windows\fonts目次找到,复制到同目次便可
  <?php
  /**
   * @version        Id:  imgcode.php 2012-11-30   k
   * @package        imgcode.php
   * @Purview           default
   * @link           http://www.3oom.com
   */
      $img = new img_code();
      $img->show();
   
  class img_code{
      private $img_type = 'png';//输入图片类型 png,gif,jpg
      private $line      = TRUE;//是不是增添搅扰线
      private $text      = '2';//验证码类型:0数字,1字母,2汉字
      private $text_size= 20;//字体巨细
      private $length      = 4;//字符串长度
      private $width      = 120;//图片宽度,像素
      private $height      = 40;//图片高度,像素
      private $font_file= 'msyh.ttf';//字体文件
      public  $img      = '';
     
      /*
      * 创立图片
      */
      private function img_create(){
          $this->img = imagecreate($this->width, $this->height);
          imagecolorallocate($this->img, 255,255,255);
   
      }
      /*
      * 显示图片
      */
      public function show(){
         
          @session_start();
          $this->img_create();
          if($this->line){
          $this->img_line();
          }
          $this->img_text();
          $this->img_header();
         
          imagedestroy($im);
          exit();
      }
   
      /*
      * 生成字符串
      */
      private function img_text(){
          $rand_string = '';
          $im = &$this->img;
          $fontColor[]  = imagecolorallocate($im, 0x15, 0x15, 0x15);
          $fontColor[]  = imagecolorallocate($im, 0x95, 0x1e, 0x04);
          $fontColor[]  = imagecolorallocate($im, 0x93, 0x14, 0xa9);
          $fontColor[]  = imagecolorallocate($im, 0x12, 0x81, 0x0a);
          $fontColor[]  = imagecolorallocate($im, 0x06, 0x3a, 0xd5);
          if($this->text<2){
              //数字,字母
              for($i=0;$i<$this->length;$i++){
                  if($this->text){
                      $c=chr(mt_rand(65,90));
                  }else{
                      $c=chr(mt_rand(48,57));
                  }
                  if( $c=='I' ) $c = 'K';
                  if( $c=='O' ) $c = 'E';
                  $rand_string[]=$c;
              }   
        
         
          }else{
              //汉字,此处可以引入汉字文件
             $arr=array('大','小','多','少','人','天','水','土','木','火','云');
              for($i=0;$i<$this->length;$i++){
                  $l = count($arr)-1;               
                  //文件编码为gbk需求转换
                  //$rand_string[] = iconv('gb2312','utf-8',$arr[mt_rand(0,$l)]);
                  $rand_string[] = $arr[mt_rand(0,$l)];
              }
            
          }
            $_SESSION['imgcode']=$rand_string;
            $_c = count($rand_string);
            for($i=0;$i<$_c;$i++)
          {
              if($this->text == 1){
              $rand_string[$i] = strtoupper($rand_string[$i]);
              }
                     
              $c_fontColor = $fontColor[mt_rand(0,4)];
              $y = $this->height-($this->height-$this->text_size)/2;
              $x = ($this->width-($this->text_size+2)*$this->length)/2;
              $y_pos = $i==0 ? $x : $i*($this->text_size+2)+$x;
              $c = mt_rand(0, 15);
              @imagettftext($im, $this->text_size, $c, $y_pos, $y, $c_fontColor, $this->font_file, $rand_string[$i]);
            
          }
      }
      /*
      * 生成线条
      */
      private function img_line(){
          $im = &$this->img;
          $img_width = $this->width;
          $img_height= $this->height;
              //后台横线
          $lineColor1 = imagecolorallocate($im, 0xda, 0xd9, 0xd1);
          for($j=3; $j<=$img_height-3; $j=$j+3)
          {
              imageline($im, 2, $j, $img_width - 2, $j, $lineColor1);
          }
         
          //后台竖线
          $lineColor2 = imagecolorallocate($im, 0xda,0xd9,0xd1);
          for($j=2;$j<$img_width-6;$j=$j+6)
          {
              imageline($im, $j, 0, $j+8, $img_height, $lineColor2);
          }
     
          //画边框
          if( $use_boder && $filter_type == 0 )
          {
              $bordercolor = imagecolorallocate($im, 0x9d, 0x9e, 0x96);
              imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $bordercolor);
          }
      }
      /*
      * 生成输入
      */
      private function img_header(){
          header("Pragma:no-cache\r\n");
             header("Cache-Control:no-cache\r\n");
              header("Expires:0\r\n");
          if($this->img_type == 'jpg'){
              header('Content-type: image/jpeg');
              imagejpeg($this->img);
          }else if($this->img_type == 'png'){
              header('Content-type: image/png');
              imagepng($this->img);
          }else{
              header('Content-type: image/gif');
              imagegif($this->img);
          }
      }
  }
   文章来历:http://www.3oom.com/blog/50.html
熟悉了PHP和MYSQL开发的要领之后,再回头看你写的那个留言本,你也许会怀疑那真的是你写的吗?当然,如果屋里还有鬼的话,也许是它写的-_-
作者: 谁可相欹    时间: 2015-2-3 23:42
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
作者: 莫相离    时间: 2015-2-6 00:24
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
作者: 小妖女    时间: 2015-2-6 21:13
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
作者: admin    时间: 2015-2-28 17:52
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
作者: 不帅    时间: 2015-3-2 22:35
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
作者: 山那边是海    时间: 2015-3-11 07:10
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
作者: 分手快乐    时间: 2015-3-16 14:58
写的比较杂,因为我也是个新手,不当至于大家多多指正。
作者: 第二个灵魂    时间: 2015-3-22 00:11
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
作者: 老尸    时间: 2015-3-27 13:59
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
作者: 小女巫    时间: 2015-3-28 15:22
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者: 变相怪杰    时间: 2015-3-29 20:44
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 再见西城    时间: 2015-4-4 23:17
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
作者: 精灵巫婆    时间: 2015-4-6 18:58
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
作者: 飘飘悠悠    时间: 2015-4-11 03:11
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
作者: 小魔女    时间: 2015-4-12 23:30
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 兰色精灵    时间: 2015-4-20 10:59
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
作者: 乐观    时间: 2015-4-24 04:44
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
作者: 金色的骷髅    时间: 2015-4-29 20:21
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2