| @@ -1,4 +1,5 @@ | |||||
| <?php | <?php | ||||
| /** | /** | ||||
| * 验证图片 | * 验证图片 | ||||
| * | * | ||||
| @@ -8,35 +9,37 @@ | |||||
| * @license http://help.dedecms.com/usersguide/license.html | * @license http://help.dedecms.com/usersguide/license.html | ||||
| * @link http://www.dedecms.com | * @link http://www.dedecms.com | ||||
| */ | */ | ||||
| require_once (dirname(__FILE__).'/../include/common.inc.php'); | |||||
| require_once (DEDEDATA.'/safe/inc_safe_config.php'); | |||||
| require_once (DEDEDATA.'/config.cache.inc.php'); | |||||
| require_once(dirname(__FILE__) . '/../include/common.inc.php'); | |||||
| require_once(DEDEDATA . '/safe/inc_safe_config.php'); | |||||
| require_once(DEDEDATA . '/config.cache.inc.php'); | |||||
| $config = array( | $config = array( | ||||
| 'font_size' => 14, | |||||
| 'font_size' => 20, | |||||
| 'img_height' => $safe_wheight, | 'img_height' => $safe_wheight, | ||||
| 'word_type' => (int)$safe_codetype, // 1:数字 2:英文 3:单词 | |||||
| 'word_type' => (int)$safe_codetype, // 1:数字 2:英文 3:单词 | |||||
| 'img_width' => $safe_wwidth, | 'img_width' => $safe_wwidth, | ||||
| 'use_boder' => TRUE, | 'use_boder' => TRUE, | ||||
| 'font_file' => DEDEINC.'/data/fonts/'.mt_rand(1,3).'.ttf', | |||||
| 'wordlist_file' => DEDEINC.'/data/words/words.txt', | |||||
| 'filter_type' => 5); | |||||
| 'font_file' => DEDEINC . '/data/fonts/' . mt_rand(1, 6) . '.ttf', | |||||
| 'wordlist_file' => DEDEINC . '/data/words/words.txt', | |||||
| 'filter_type' => 5 | |||||
| ); | |||||
| $enkey = substr(md5(substr($cfg_cookie_encode,0,5)),0,10); | |||||
| $sessSavePath = DEDEDATA."/sessions_{$enkey}"; | |||||
| if ( !is_dir($sessSavePath) ) mkdir($sessSavePath); | |||||
| $enkey = substr(md5(substr($cfg_cookie_encode, 0, 5)), 0, 10); | |||||
| $sessSavePath = DEDEDATA . "/sessions_{$enkey}"; | |||||
| if (!is_dir($sessSavePath)) mkdir($sessSavePath); | |||||
| // Session保存路径 | // Session保存路径 | ||||
| if(is_writeable($sessSavePath) && is_readable($sessSavePath)){ session_save_path($sessSavePath); } | |||||
| if(!empty($cfg_domain_cookie)) session_set_cookie_params(0,'/',$cfg_domain_cookie); | |||||
| if (is_writeable($sessSavePath) && is_readable($sessSavePath)) { | |||||
| session_save_path($sessSavePath); | |||||
| } | |||||
| if (!empty($cfg_domain_cookie)) session_set_cookie_params(0, '/', $cfg_domain_cookie); | |||||
| if (!echo_validate_image($config)) | |||||
| { | |||||
| if (!echo_validate_image($config)) { | |||||
| // 如果不成功则初始化一个默认验证码 | // 如果不成功则初始化一个默认验证码 | ||||
| @session_start(); | @session_start(); | ||||
| $_SESSION['securimage_code_value'] = strtolower('abcd'); | $_SESSION['securimage_code_value'] = strtolower('abcd'); | ||||
| if (function_exists('imagecreatefromjpeg')) { | if (function_exists('imagecreatefromjpeg')) { | ||||
| $im = @imagecreatefromjpeg(DEDEINC.'/data/vdcode.jpg'); | |||||
| $im = @imagecreatefromjpeg(DEDEINC . '/data/vdcode.jpg'); | |||||
| header("Pragma:no-cache\r\n"); | header("Pragma:no-cache\r\n"); | ||||
| header("Cache-Control:no-cache\r\n"); | header("Cache-Control:no-cache\r\n"); | ||||
| header("Expires:0\r\n"); | header("Expires:0\r\n"); | ||||
| @@ -46,34 +49,34 @@ if (!echo_validate_image($config)) | |||||
| header("Pragma:no-cache\r\n"); | header("Pragma:no-cache\r\n"); | ||||
| header("Cache-Control:no-cache\r\n"); | header("Cache-Control:no-cache\r\n"); | ||||
| header("Expires:0\r\n"); | header("Expires:0\r\n"); | ||||
| $c = file_get_contents(DEDEINC.'/data/vdcode.jpg',true); | |||||
| $size = filesize(DEDEINC.'/data/vdcode.jpg'); | |||||
| header ('Content-Type: image/x-icon'); | |||||
| header ("Content-length: $size"); | |||||
| $c = file_get_contents(DEDEINC . '/data/vdcode.jpg', true); | |||||
| $size = filesize(DEDEINC . '/data/vdcode.jpg'); | |||||
| header('Content-Type: image/x-icon'); | |||||
| header("Content-length: $size"); | |||||
| echo $c; | echo $c; | ||||
| } | } | ||||
| } | } | ||||
| function echo_validate_image( $config = array() ) | |||||
| function echo_validate_image($config = array()) | |||||
| { | { | ||||
| @session_start(); | @session_start(); | ||||
| if ( !function_exists('imagettftext') ) | |||||
| { | |||||
| if (!function_exists('imagettftext')) { | |||||
| return false; | return false; | ||||
| } | } | ||||
| //主要参数 | //主要参数 | ||||
| $font_size = isset($config['font_size']) ? $config['font_size'] : 14; | $font_size = isset($config['font_size']) ? $config['font_size'] : 14; | ||||
| $img_height = isset($config['img_height']) ? $config['img_height'] : 24; | |||||
| $img_height = isset($config['img_height']) ? $config['img_height'] : 38; | |||||
| $img_width = isset($config['img_width']) ? $config['img_width'] : 68; | $img_width = isset($config['img_width']) ? $config['img_width'] : 68; | ||||
| $font_file = isset($config['font_file']) ? $config['font_file'] : DEDEINC.'/data/font/'.mt_rand(1,3).'.ttf'; | |||||
| $font_file = isset($config['font_file']) ? $config['font_file'] : DEDEINC . '/data/font/' . mt_rand(1, 6) . '.ttf'; | |||||
| $use_boder = isset($config['use_boder']) ? $config['use_boder'] : TRUE; | $use_boder = isset($config['use_boder']) ? $config['use_boder'] : TRUE; | ||||
| $filter_type = isset($config['filter_type']) ? $config['filter_type'] : 0; | $filter_type = isset($config['filter_type']) ? $config['filter_type'] : 0; | ||||
| //创建图片,并设置背景色 | //创建图片,并设置背景色 | ||||
| $im = @imagecreate($img_width, $img_height); | $im = @imagecreate($img_width, $img_height); | ||||
| imagecolorallocate($im, 255,255,255); | |||||
| imagecolorallocate($im, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255)); | |||||
| //文字随机颜色 | //文字随机颜色 | ||||
| $fontColor[] = imagecolorallocate($im, 0x15, 0x15, 0x15); | $fontColor[] = imagecolorallocate($im, 0x15, 0x15, 0x15); | ||||
| @@ -84,27 +87,23 @@ function echo_validate_image( $config = array() ) | |||||
| //获取随机字符 | //获取随机字符 | ||||
| $rndstring = ''; | $rndstring = ''; | ||||
| if ($config['word_type'] != 3) | |||||
| { | |||||
| for($i=0; $i<4; $i++) | |||||
| { | |||||
| if ($config['word_type'] == 1) | |||||
| { | |||||
| if ($config['word_type'] != 3) { | |||||
| for ($i = 0; $i < 4; $i++) { | |||||
| if ($config['word_type'] == 1) { | |||||
| $c = chr(mt_rand(48, 57)); | $c = chr(mt_rand(48, 57)); | ||||
| } else if($config['word_type'] == 2) | |||||
| { | |||||
| } else if ($config['word_type'] == 2) { | |||||
| $c = chr(mt_rand(65, 90)); | $c = chr(mt_rand(65, 90)); | ||||
| if( $c=='I' ) $c = 'P'; | |||||
| if( $c=='O' ) $c = 'N'; | |||||
| if ($c == 'I') $c = 'P'; | |||||
| if ($c == 'O') $c = 'N'; | |||||
| } | } | ||||
| $rndstring .= $c; | $rndstring .= $c; | ||||
| } | } | ||||
| } else { | } else { | ||||
| $chars='abcdefghigklmnopqrstuvwxwyABCDEFGHIGKLMNOPQRSTUVWXWY0123456789'; | |||||
| $rndstring=''; | |||||
| $length = rand(4,4); | |||||
| $chars = 'abcdefghigklmnopqrstuvwxwyABCDEFGHIGKLMNOPQRSTUVWXWY0123456789'; | |||||
| $rndstring = ''; | |||||
| $length = rand(4, 4); | |||||
| $max = strlen($chars) - 1; | $max = strlen($chars) - 1; | ||||
| for($i = 0; $i < $length; $i++) { | |||||
| for ($i = 0; $i < $length; $i++) { | |||||
| $rndstring .= $chars[mt_rand(0, $max)]; | $rndstring .= $chars[mt_rand(0, $max)]; | ||||
| } | } | ||||
| } | } | ||||
| @@ -113,51 +112,67 @@ function echo_validate_image( $config = array() ) | |||||
| $rndcodelen = strlen($rndstring); | $rndcodelen = strlen($rndstring); | ||||
| //背景横线 | |||||
| $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); | |||||
| // //背景横线 | |||||
| // $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 < 100; $j = $j + 6) { | |||||
| // imageline($im, $j, 0, $j + 8, $img_height, $lineColor2); | |||||
| // } | |||||
| // 增加一些噪线 | |||||
| for ($i=0; $i < 5; $i++) { | |||||
| $red = mt_rand(50, 255); | |||||
| $green = mt_rand(50, 255); | |||||
| $blue = mt_rand(50, 255); | |||||
| $tcol = imagecolorallocate($im, $red, $green, $blue); | |||||
| if (mt_rand(0, 1)) { // Horizontal | |||||
| $Xa = mt_rand(0, $img_width/2); | |||||
| $Ya = mt_rand(0, $img_height); | |||||
| $Xb = mt_rand($img_width/2, $img_width); | |||||
| $Yb = mt_rand(0, $img_height); | |||||
| } else { // Vertical | |||||
| $Xa = mt_rand(0, $img_width); | |||||
| $Ya = mt_rand(0, $img_height/2); | |||||
| $Xb = mt_rand(0, $img_width); | |||||
| $Yb = mt_rand($img_height/2, $img_height); | |||||
| } | |||||
| imagesetthickness($im, mt_rand(1, 3)); | |||||
| imageline($im, $Xa, $Ya, $Xb, $Yb, $tcol); | |||||
| } | } | ||||
| //背景竖线 | |||||
| $lineColor2 = imagecolorallocate($im, 0xda,0xd9,0xd1); | |||||
| for($j=2;$j<100;$j=$j+6) | |||||
| { | |||||
| imageline($im, $j, 0, $j+8, $img_height, $lineColor2); | |||||
| } | |||||
| //画边框 | //画边框 | ||||
| if( $use_boder && $filter_type == 0 ) | |||||
| { | |||||
| if ($use_boder && $filter_type == 0) { | |||||
| $bordercolor = imagecolorallocate($im, 0x9d, 0x9e, 0x96); | $bordercolor = imagecolorallocate($im, 0x9d, 0x9e, 0x96); | ||||
| imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $bordercolor); | |||||
| imagerectangle($im, 0, 0, $img_width - 1, $img_height - 1, $bordercolor); | |||||
| } | } | ||||
| //输出文字 | //输出文字 | ||||
| $lastc = ''; | $lastc = ''; | ||||
| for($i=0;$i<$rndcodelen;$i++) | |||||
| { | |||||
| $bc = mt_rand(0, 1); | |||||
| for ($i = 0; $i < $rndcodelen; $i++) { | |||||
| $rndstring[$i] = strtoupper($rndstring[$i]); | $rndstring[$i] = strtoupper($rndstring[$i]); | ||||
| $c_fontColor = $fontColor[mt_rand(0,4)]; | |||||
| $y_pos = $i==0 ? 4 : $i*($font_size+2); | |||||
| $c = mt_rand(0, 15); | |||||
| @imagettftext($im, $font_size, $c, $y_pos, 19, $c_fontColor, $font_file, $rndstring[$i]); | |||||
| $c_fontColor = $fontColor[mt_rand(0, 4)]; | |||||
| $y_pos = $i == 0 ? 4 : $i * ($font_size + 2); | |||||
| $c = mt_rand(10, 30); | |||||
| @imagettftext($im, $font_size, $c, $y_pos, 28, $c_fontColor, $font_file, $rndstring[$i]); | |||||
| $lastc = $rndstring[$i]; | $lastc = $rndstring[$i]; | ||||
| } | } | ||||
| //图象效果 | //图象效果 | ||||
| switch($filter_type) | |||||
| { | |||||
| switch ($filter_type) { | |||||
| case 1: | case 1: | ||||
| imagefilter ( $im, IMG_FILTER_NEGATE); | |||||
| imagefilter($im, IMG_FILTER_NEGATE); | |||||
| break; | break; | ||||
| case 2: | case 2: | ||||
| imagefilter ( $im, IMG_FILTER_EMBOSS); | |||||
| imagefilter($im, IMG_FILTER_EMBOSS); | |||||
| break; | break; | ||||
| case 3: | case 3: | ||||
| imagefilter ( $im, IMG_FILTER_EDGEDETECT); | |||||
| imagefilter($im, IMG_FILTER_EDGEDETECT); | |||||
| break; | break; | ||||
| default: | default: | ||||
| break; | break; | ||||
| @@ -170,13 +185,10 @@ function echo_validate_image( $config = array() ) | |||||
| //输出特定类型的图片格式,优先级为 gif -> jpg ->png | //输出特定类型的图片格式,优先级为 gif -> jpg ->png | ||||
| //dump(function_exists("imagejpeg")); | //dump(function_exists("imagejpeg")); | ||||
| if(function_exists("imagejpeg")) | |||||
| { | |||||
| if (function_exists("imagejpeg")) { | |||||
| header("content-type:image/jpeg\r\n"); | header("content-type:image/jpeg\r\n"); | ||||
| imagejpeg($im); | imagejpeg($im); | ||||
| } | |||||
| else | |||||
| { | |||||
| } else { | |||||
| header("content-type:image/png\r\n"); | header("content-type:image/png\r\n"); | ||||
| imagepng($im); | imagepng($im); | ||||
| } | } | ||||