用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5339|回复: 9
收起左侧

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

[复制链接]
发表于 2013-8-13 00:16:21 | 显示全部楼层 |阅读模式
ci验证码每次调用得生成一个图片,那么如果同时有N个人访问得生成N张验证码图片?那样不浪费空间吗?
发表于 2013-8-13 13:44:42 | 显示全部楼层
因为生成的验证码不会保存呀~ 就是一个数据信息~ 给浏览器解析成图片~
 楼主| 发表于 2013-8-13 15:42:30 | 显示全部楼层
IvanCI 发表于 2013-8-13 13:44
因为生成的验证码不会保存呀~ 就是一个数据信息~ 给浏览器解析成图片~

我试过了,保存了,在指定的目录下生成图片了,然后返回的数组里有指向这个图片的链接,访问几次就生成几张
发表于 2013-8-14 06:53:20 | 显示全部楼层
那你自己动手改改呗~
发表于 2013-8-14 09:40:11 | 显示全部楼层
那用第三方或者自己搞一个~ 不过验证码图片保存空间不算大~ 无所谓吧~
 楼主| 发表于 2013-8-14 15:14:27 | 显示全部楼层
ichou 发表于 2013-8-14 06:53
那你自己动手改改呗~

好的,只是怕自己不知道是不是CI哪里有自动删除的功能,没有就自己改改
 楼主| 发表于 2013-8-14 15:14:57 | 显示全部楼层
IvanCI 发表于 2013-8-14 09:40
那用第三方或者自己搞一个~ 不过验证码图片保存空间不算大~ 无所谓吧~

嗯嗯,好的
发表于 2013-10-10 10:47:24 | 显示全部楼层
控制器的代码
发表于 2013-10-10 10:51:39 | 显示全部楼层

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


修改后验证码类
PHP复制代码
<?php  if ( ! 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 */
复制代码


视图
HTML复制代码
 <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>
复制代码



发表于 2013-10-10 10:53:15 | 显示全部楼层
这个是不需要生成图片的验证码

本版积分规则