控制器
application/controllers/welcome.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
/**a
* Index Page for this controller.
*
* Maps to the following URL
* http://example.com/index.php/welcome
* - or -
* http://example.com/index.php/welcome/index
* - or -
* Since this controller is set as the default controller in
* config/routes.php, it's displayed at http://example.com/
*
* So any other public methods not prefixed with an underscore will
* map to /index.php/welcome/<method_name>
* @see http://codeigniter.com/user_guide/general/urls.html
*/
public function index()
{
$this->load->helper('url');
$this->load->view('welcome_message');
}
//显示 验证码
public function captcha(){
$this->load->library('captcha');
$this->captcha->index();
}
//检查 验证码
public function check($acaptcha){
if( $this->input->cookie('captcha_number') == NULL ){
return FALSE;
}
list($value,$time) = explode('|',$this->input->cookie('captcha_number'));
if( (time() + 120) < $time ){
return FALSE;
}
if( $value == md5(strtoupper($acaptcha))){
return TRUE;
}else{
return FALSE;
}
}
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */
视图
application/views/welcome.php
welcome.php
<img src="<?php echo site_url('welcome/captcha')?>" onClick="this.src='<?php echo site_url('welcome/captcha')?>'+'/?'+Math.random();" style="cursor:pointer;" align="验证码" />
类库文件
application/libraries/captcha.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Captcha {
private $ci ;
function __construct(){
$this->ci= & get_instance();
$this->ci->load->helper('string');
}
function index($word='alnum',$number=6,$img_width=150,$img_height=30){
// -----------------------------------
// Do we have a "word" yet?
// -----------------------------------
$word = strtoupper(random_string($word,$number));
$this->ci->input->set_cookie("captcha_number",md5($word).'|'.(time()+120),120);
$font_path = 'system/fonts/texb.ttf';
// -----------------------------------
// 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
// -----------------------------------
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
}
}
codeigniter验证码操作
最新推荐文章于 2021-03-12 01:08:31 发布