似月光 发表于 2013-8-13 00:16:21

ci验证码每次调用得生成一个不浪费空间吗?

ci验证码每次调用得生成一个图片,那么如果同时有N个人访问得生成N张验证码图片?那样不浪费空间吗?

IvanCI 发表于 2013-8-13 13:44:42

因为生成的验证码不会保存呀~ 就是一个数据信息~ 给浏览器解析成图片~

似月光 发表于 2013-8-13 15:42:30

IvanCI 发表于 2013-8-13 13:44 static/image/common/back.gif
因为生成的验证码不会保存呀~ 就是一个数据信息~ 给浏览器解析成图片~

我试过了,保存了,在指定的目录下生成图片了,然后返回的数组里有指向这个图片的链接,访问几次就生成几张

ichou 发表于 2013-8-14 06:53:20

那你自己动手改改呗~

IvanCI 发表于 2013-8-14 09:40:11

那用第三方或者自己搞一个~ 不过验证码图片保存空间不算大~ 无所谓吧~

似月光 发表于 2013-8-14 15:14:27

ichou 发表于 2013-8-14 06:53 static/image/common/back.gif
那你自己动手改改呗~

好的,只是怕自己不知道是不是CI哪里有自动删除的功能,没有就自己改改

似月光 发表于 2013-8-14 15:14:57

IvanCI 发表于 2013-8-14 09:40 static/image/common/back.gif
那用第三方或者自己搞一个~ 不过验证码图片保存空间不算大~ 无所谓吧~

嗯嗯,好的

qq907274532 发表于 2013-10-10 10:47:24

控制器的代码

qq907274532 发表于 2013-10-10 10:51:39


控制器#生成验证码
      public function code(){
                #调用函数生成验证码
                $vals = array(
                        'word_length' => 6,
                );
                $code = create_captcha($vals);
                #将验证码字符串保存到session中
                $this->session->set_userdata('code',$code);
      }


修改后验证码类<?phpif ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
* An open source application development framework for PHP 5.1.6 or newer
*
* @package                CodeIgniter
* @author                ExpressionEngine Dev Team
* @copyright      Copyright (c) 2008 - 2011, EllisLab, Inc.
* @license                http://codeigniter.com/user_guide/license.html
* @link                http://codeigniter.com
* @since                Version 1.0
* @filesource
*/

// ------------------------------------------------------------------------

/**
* CodeIgniter CAPTCHA Helper
*
* @package                CodeIgniter
* @subpackage      Helpers
* @category      Helpers
* @author                ExpressionEngine Dev Team
* @link                http://codeigniter.com/user_guide/helpers/xml_helper.html
*/

// ------------------------------------------------------------------------

/**
* Create CAPTCHA
*
* @access      public
* @param      array      array of data for the CAPTCHA
* @param      string      path to create the image in
* @param      string      URL to the CAPTCHA image folder
* @param      string      server path to font
* @return      string
*/
if ( ! function_exists('create_captcha'))
{
      function create_captcha($data = '', $font_path = '')
      {
                $defaults = array('word' => '', 'word_length' => 4, 'img_width' => '150', 'img_height' => '30', 'font_path' => '', 'expiration' => 7200);

                foreach ($defaults as $key => $val)
                {
                        if ( ! is_array($data))
                        {
                              if ( ! isset($$key) OR $$key == '')
                              {
                                        $$key = $val;
                              }
                        }
                        else
                        {
                              $$key = ( ! isset($data[$key])) ? $val : $data[$key];
                        }
                }
/*
                if ($img_path == '' OR $img_url == '')
                {
                        return FALSE;
                }

                if ( ! @is_dir($img_path))
                {
                        return FALSE;
                }

                if ( ! is_writable($img_path))
                {
                        return FALSE;
                }

                if ( ! extension_loaded('gd'))
                {
                        return FALSE;
                }

                // -----------------------------------
                // Remove old images
                // -----------------------------------

                list($usec, $sec) = explode(" ", microtime());
                $now = ((float)$usec + (float)$sec);

                $current_dir = @opendir($img_path);

                while ($filename = @readdir($current_dir))
                {
                        if ($filename != "." and $filename != ".." and $filename != "index.html")
                        {
                              $name = str_replace(".jpg", "", $filename);

                              if (($name + $expiration) < $now)
                              {
                                        @unlink($img_path.$filename);
                              }
                        }
                }

                @closedir($current_dir);

*/                // -----------------------------------
                // Do we have a "word" yet?
                // -----------------------------------

         if ($word == '')
         {
                        $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

                        $str = '';
                        for ($i = 0; $i < $word_length; $i++)
                        {
                              $str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
                        }

                        $word = $str;
         }

                // -----------------------------------
                // Determine angle and position
                // -----------------------------------

                $length      = strlen($word);
                $angle      = ($length >= 6) ? rand(-($length-6), ($length-6)) : 0;
                $x_axis      = rand(6, (360/$length)-16);
                $y_axis = ($angle >= 0 ) ? rand($img_height, $img_width) : rand(6, $img_height);

                // -----------------------------------
                // Create image
                // -----------------------------------

                // PHP.net recommends imagecreatetruecolor(), but it isn't always available
                if (function_exists('imagecreatetruecolor'))
                {
                        $im = imagecreatetruecolor($img_width, $img_height);
                }
                else
                {
                        $im = imagecreate($img_width, $img_height);
                }

                // -----------------------------------
                //Assign colors
                // -----------------------------------

                $bg_color                = imagecolorallocate ($im, 255, 255, 255);
                $border_color      = imagecolorallocate ($im, 153, 102, 102);
                $text_color                = imagecolorallocate ($im, 204, 153, 153);
                $grid_color                = imagecolorallocate($im, 255, 182, 182);
                $shadow_color      = imagecolorallocate($im, 255, 240, 240);

                // -----------------------------------
                //Create the rectangle
                // -----------------------------------

                ImageFilledRectangle($im, 0, 0, $img_width, $img_height, $bg_color);

                // -----------------------------------
                //Create the spiral pattern
                // -----------------------------------

                $theta                = 1;
                $thetac                = 7;
                $radius                = 16;
                $circles      = 20;
                $points                = 32;

                for ($i = 0; $i < ($circles * $points) - 1; $i++)
                {
                        $theta = $theta + $thetac;
                        $rad = $radius * ($i / $points );
                        $x = ($rad * cos($theta)) + $x_axis;
                        $y = ($rad * sin($theta)) + $y_axis;
                        $theta = $theta + $thetac;
                        $rad1 = $radius * (($i + 1) / $points);
                        $x1 = ($rad1 * cos($theta)) + $x_axis;
                        $y1 = ($rad1 * sin($theta )) + $y_axis;
                        imageline($im, $x, $y, $x1, $y1, $grid_color);
                        $theta = $theta - $thetac;
                }

                // -----------------------------------
                //Write the text
                // -----------------------------------

                $use_font = ($font_path != '' AND file_exists($font_path) AND function_exists('imagettftext')) ? TRUE : FALSE;

                if ($use_font == FALSE)
                {
                        $font_size = 5;
                        $x = rand(0, $img_width/($length/3));
                        $y = 0;
                }
                else
                {
                        $font_size      = 16;
                        $x = rand(0, $img_width/($length/1.5));
                        $y = $font_size+2;
                }

                for ($i = 0; $i < strlen($word); $i++)
                {
                        if ($use_font == FALSE)
                        {
                              $y = rand(0 , $img_height/2);
                              imagestring($im, $font_size, $x, $y, substr($word, $i, 1), $text_color);
                              $x += ($font_size*2);
                        }
                        else
                        {
                              $y = rand($img_height/2, $img_height-3);
                              imagettftext($im, $font_size, $angle, $x, $y, $text_color, $font_path, substr($word, $i, 1));
                              $x += $font_size;
                        }
                }


                // -----------------------------------
                //Create the border
                // -----------------------------------

                imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color);

                // -----------------------------------
                //Generate the image
                // -----------------------------------

                // $img_name = $now.'.jpg';

                // ImageJPEG($im, $img_path.$img_name);

                // $img = "<img src=\"$img_url$img_name\" width=\"$img_width\" height=\"$img_height\" style=\"border:0;\" alt=\" \" />";
                #直接输出
                header("Content-Type:image/jpeg");
                imagejpeg($im);

                ImageDestroy($im);
                #返回生成的验证码字符串
                return $word;
                // return array('word' => $word, 'time' => $now, 'image' => $img);
      }
}

// ------------------------------------------------------------------------

/* End of file captcha_helper.php */
/* Location: ./system/heleprs/captcha_helper.php */

视图 <td colspan="2" align="right">
      <img src="<?php echo site_url('admin/privilege/code');?>" alt="" onclick= this.src="<?php echo site_url('admin/privilege/code').'/'?>"+Math.random() style="cursor: pointer;" title="看不清?点击更换另一个验证码。"/>
      </td>


qq907274532 发表于 2013-10-10 10:53:15

这个是不需要生成图片的验证码
页: [1]
查看完整版本: ci验证码每次调用得生成一个不浪费空间吗?