741 lines
20 KiB
PHP
741 lines
20 KiB
PHP
<?php
|
|
|
|
/*
|
|
+--------------------------------------------------------------------------
|
|
| Invision Power Board 2.2.2
|
|
| =============================================
|
|
| by Matthew Mecham
|
|
| (c) 2001 - 2006 Invision Power Services, Inc.
|
|
| http://www.invisionpower.com
|
|
| =============================================
|
|
| Web: http://www.invisionboard.com
|
|
| http://www.ibresource.ru/products/invisionpowerboard/
|
|
| Time: Monday 05th of March 2007 10:10:55 PM
|
|
| Release: e3790216629e5a2aaf37070b32237f06
|
|
| Licence Info: http://www.invisionboard.com/?license
|
|
| http://www.ibresource.ru/license
|
|
+---------------------------------------------------------------------------
|
|
| INVISION POWER BOARD ÍÅ ßÂËßÅÒÑß ÁÅÑÏËÀÒÍÛÌ ÏÐÎÃÐÀÌÌÍÛÌ ÎÁÅÑÏÅ×ÅÍÈÅÌ!
|
|
| Ïðàâà íà ÏÎ ïðèíàäëåæàò Invision Power Services
|
|
| Ïðàâà íà ïåðåâîä IBResource (http://www.ibresource.ru)
|
|
+---------------------------------------------------------------------------
|
|
| > $Id$
|
|
| > $Revision: 128 $
|
|
| > $Date: 2006-01-20 12:46:26 +0000 (Fri, 20 Jan 2006) $
|
|
+---------------------------------------------------------------------------
|
|
|
|
|
| > CAPTCHA ANTI-SPAM CLASS
|
|
| > Script written by Matt Mecham
|
|
| > Date started: Thursday 2 February (11:08)
|
|
|
|
|
+---------------------------------------------------------------------------
|
|
*/
|
|
|
|
/**
|
|
* CAPTCHA CLASS
|
|
* ipsclass dependent method of showing an anti-spam image
|
|
*
|
|
* This creates a unique MD5 hash and stores it in the DB with
|
|
* an 8 character string of 0-9a-z
|
|
*
|
|
* <code>
|
|
* CREATE TABLE captcha (
|
|
* captcha_unique_id VARCHAR(32) NOT NULL default '',
|
|
* captcha_string VARCHAR(100) NOT NULL default '',
|
|
* captcha_ipaddress VARCHAR(16) NOT NULL default '',
|
|
* captcha_date INT(10) NOT NULL default '',
|
|
* PRIMARY KEY (captcha_unique_id )
|
|
* );
|
|
* </code>
|
|
* @package IPDYNAMIC
|
|
* @author Matt Mecham
|
|
* @copyright Invision Power Services, Inc.
|
|
* @version 1.0
|
|
*/
|
|
|
|
class class_captcha
|
|
{
|
|
/**
|
|
* Global IPS class array
|
|
* @var object
|
|
*/
|
|
var $ipsclass;
|
|
|
|
/**
|
|
* GD version
|
|
* @var integer
|
|
*/
|
|
var $gd_version = 0;
|
|
|
|
/**
|
|
* Backgrounds path
|
|
* @var string
|
|
*/
|
|
var $path_background = '';
|
|
|
|
/**
|
|
* Fonts path
|
|
* @var string
|
|
*/
|
|
var $path_fonts = '';
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Initializes captcha session
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* Initializes captcha session
|
|
* Clears out "dead" entries, adds new row and returns
|
|
* unique ID for use in an image
|
|
*
|
|
* @return string Captcha unique ID
|
|
*/
|
|
function captcha_create_session()
|
|
{
|
|
//-----------------------------------------
|
|
// Clear old
|
|
//-----------------------------------------
|
|
|
|
$this->captcha_clear_sessions( $this->ipsclass->ip_address );
|
|
|
|
//-----------------------------------------
|
|
// Create new ID
|
|
//-----------------------------------------
|
|
|
|
$captcha_unique_id = md5( uniqid( time() ) );
|
|
$captcha_string = "";
|
|
|
|
//-----------------------------------------
|
|
// Create new string
|
|
//-----------------------------------------
|
|
|
|
mt_srand( (double) microtime() * 1000000 );
|
|
$final_rand = md5( uniqid( mt_rand(), TRUE ) );
|
|
mt_srand();
|
|
|
|
for( $i = 0; $i < 6; $i++ )
|
|
{
|
|
$captcha_string .= $final_rand{ mt_rand(0, 31) };
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Add to the DB
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->DB->do_insert( 'captcha', array( 'captcha_unique_id' => $captcha_unique_id,
|
|
'captcha_string' => $captcha_string,
|
|
'captcha_ipaddress' => $this->ipsclass->ip_address,
|
|
'captcha_date' => time() ) );
|
|
|
|
//-----------------------------------------
|
|
// Return ID
|
|
//-----------------------------------------
|
|
|
|
return $captcha_unique_id;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Captcha validate
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
/**
|
|
* Show the captcha bot image
|
|
*
|
|
* @param string captcha_unique_id The captcha DB row
|
|
* @param string captcha_input The user entered data
|
|
* @return void
|
|
* @since 1.0
|
|
*/
|
|
function captcha_validate( $captcha_unique_id, $captcha_input )
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$captcha_input = trim( strtolower($captcha_input) );
|
|
|
|
//-----------------------------------------
|
|
// Get the info from the DB
|
|
//-----------------------------------------
|
|
|
|
$captcha = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*',
|
|
'from' => 'captcha',
|
|
'where' => "captcha_unique_id='".$captcha_unique_id."'" ) );
|
|
|
|
if ( ! $captcha['captcha_unique_id'] )
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Check...
|
|
//-----------------------------------------
|
|
|
|
if ( $captcha['captcha_string'] != $captcha_input )
|
|
{
|
|
return FALSE;
|
|
}
|
|
else
|
|
{
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Captcha show image
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
/**
|
|
* Show the captcha bot image
|
|
*
|
|
* @param string captcha_unique_id
|
|
* @return void
|
|
* @since 1.0
|
|
*/
|
|
function captcha_show_image( $captcha_unique_id )
|
|
{
|
|
//-----------------------------------------
|
|
// CHECK
|
|
//-----------------------------------------
|
|
|
|
if ( ! $captcha_unique_id )
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Get the info from the DB
|
|
//-----------------------------------------
|
|
|
|
$captcha = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*',
|
|
'from' => 'captcha',
|
|
'where' => "captcha_unique_id='".$captcha_unique_id."'" ) );
|
|
|
|
if ( ! $captcha['captcha_unique_id'] )
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Show it...
|
|
//-----------------------------------------
|
|
|
|
$this->captcha_show_gd_img( $captcha['captcha_string'] );
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Show GD created security image...
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
/**
|
|
* Show anti-spam bot GD image numbers
|
|
*
|
|
* @param string Number string
|
|
* @return void
|
|
* @since 1.0
|
|
*/
|
|
function captcha_show_gd_img( $content="" )
|
|
{
|
|
//-----------------------------------------
|
|
// Is GD Available?
|
|
//-----------------------------------------
|
|
|
|
if( !extension_loaded('gd') )
|
|
{
|
|
exit();
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$content = ' '. preg_replace( "/(\w)/", "\\1 ", $content ) .' ';
|
|
$allow_fonts = isset( $this->ipsclass->vars['captcha_allow_fonts'] ) ? $this->ipsclass->vars['captcha_allow_fonts'] : 1;
|
|
$use_fonts = 0;
|
|
$tmp_x = 135;
|
|
$tmp_y = 20;
|
|
$image_x = 200;
|
|
$image_y = 60;
|
|
$circles = 3;
|
|
$continue_loop = TRUE;
|
|
$_started = FALSE;
|
|
|
|
//-----------------------------------------
|
|
// Get backgrounds and fonts...
|
|
//-----------------------------------------
|
|
|
|
$backgrounds = $this->_captcha_show_gd_img_get_backgrounds();
|
|
$fonts = $this->_captcha_show_gd_img_get_fonts();
|
|
|
|
//-----------------------------------------
|
|
// Seed rand functions for PHP versions that don't
|
|
//-----------------------------------------
|
|
|
|
mt_srand( (double) microtime() * 1000000 );
|
|
|
|
//-----------------------------------------
|
|
// Got a background?
|
|
//-----------------------------------------
|
|
|
|
if ( $this->ipsclass->vars['gd_version'] > 1 )
|
|
{
|
|
while ( $continue_loop )
|
|
{
|
|
if ( is_array( $backgrounds ) AND count( $backgrounds ) )
|
|
{
|
|
$i = mt_rand(0, count( $backgrounds ) - 1 );
|
|
|
|
$background = $backgrounds[ $i ];
|
|
$_file_extension = preg_replace( "#^.*\.(\w{2,4})$#is", "\\1", strtolower( $background ) );
|
|
|
|
switch( $_file_extension )
|
|
{
|
|
case 'jpg':
|
|
case 'jpe':
|
|
case 'jpeg':
|
|
if ( ! function_exists('imagecreatefromjpeg') OR ! $im = @imagecreatefromjpeg($background) )
|
|
{
|
|
unset( $backgrounds[ $i ] );
|
|
}
|
|
else
|
|
{
|
|
$continue_loop = FALSE;
|
|
$_started = TRUE;
|
|
}
|
|
break;
|
|
case 'gif':
|
|
if ( ! function_exists('imagecreatefromgif') OR ! $im = @imagecreatefromgif($background) )
|
|
{
|
|
unset( $backgrounds[ $i ] );
|
|
}
|
|
else
|
|
{
|
|
$continue_loop = FALSE;
|
|
$_started = TRUE;
|
|
}
|
|
break;
|
|
case 'png':
|
|
if ( ! function_exists('imagecreatefrompng') OR ! $im = @imagecreatefrompng($background) )
|
|
{
|
|
unset( $backgrounds[ $i ] );
|
|
}
|
|
else
|
|
{
|
|
$continue_loop = FALSE;
|
|
$_started = TRUE;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$continue_loop = FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Still not got one? DO OLD FASHIONED
|
|
//-----------------------------------------
|
|
|
|
if ( $_started !== TRUE )
|
|
{
|
|
if ( $this->ipsclass->vars['gd_version'] == 1 )
|
|
{
|
|
$im = imagecreate($image_x, $image_y);
|
|
$tmp = imagecreate($tmp_x, $tmp_y);
|
|
}
|
|
else
|
|
{
|
|
$im = imagecreatetruecolor($image_x, $image_y);
|
|
$tmp = imagecreatetruecolor($tmp_x, $tmp_y);
|
|
}
|
|
|
|
$white = ImageColorAllocate($tmp, 255, 255, 255);
|
|
$black = ImageColorAllocate($tmp, 0, 0, 0);
|
|
$grey = ImageColorAllocate($tmp, 200, 200, 200 );
|
|
|
|
imagefill($tmp, 0, 0, $white);
|
|
|
|
for ( $i = 1; $i <= $circles; $i++ )
|
|
{
|
|
$values = array(
|
|
0 => rand(0, $tmp_x - 10),
|
|
1 => rand(0, $tmp_y - 3),
|
|
2 => rand(0, $tmp_x - 10),
|
|
3 => rand(0, $tmp_y - 3),
|
|
4 => rand(0, $tmp_x - 10),
|
|
5 => rand(0, $tmp_y - 3),
|
|
6 => rand(0, $tmp_x - 10),
|
|
7 => rand(0, $tmp_y - 3),
|
|
8 => rand(0, $tmp_x - 10),
|
|
9 => rand(0, $tmp_y - 3),
|
|
10 => rand(0, $tmp_x - 10),
|
|
11 => rand(0, $tmp_y - 3),
|
|
);
|
|
|
|
$randomcolor = imagecolorallocate( $tmp, rand(100,255), rand(100,255),rand(100,255) );
|
|
imagefilledpolygon($tmp, $values, 6, $randomcolor );
|
|
}
|
|
|
|
$num = strlen($content);
|
|
$x_param = 0;
|
|
$y_param = 0;
|
|
|
|
for( $i = 0; $i < $num; $i++ )
|
|
{
|
|
$x_param += rand(-1,12);
|
|
$y_param = rand(-3,8);
|
|
|
|
if( $x_param + 18 > $image_x )
|
|
{
|
|
$x_param -= ceil( $x_param + 18 - $image_x );
|
|
}
|
|
|
|
$randomcolor = imagecolorallocate( $tmp, rand(0,150), rand(0,150),rand(0,150) );
|
|
|
|
imagestring($tmp, 5, $x_param+1, $y_param+1, $content{$i}, $grey);
|
|
imagestring($tmp, 5, $x_param, $y_param, $content{$i}, $randomcolor);
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Distort by resizing
|
|
//-----------------------------------------
|
|
|
|
imagecopyresized($im, $tmp, 0, 0, 0, 0, $image_x, $image_y, $tmp_x, $tmp_y);
|
|
|
|
imagedestroy($tmp);
|
|
|
|
//-----------------------------------------
|
|
// Background dots and lines
|
|
//-----------------------------------------
|
|
|
|
$random_pixels = $image_x * $image_y / 10;
|
|
|
|
for ($i = 0; $i < $random_pixels; $i++)
|
|
{
|
|
$randomcolor = imagecolorallocate( $im, rand(0,150), rand(0,150),rand(0,150) );
|
|
ImageSetPixel($im, rand(0, $image_x), rand(0, $image_y), $randomcolor);
|
|
}
|
|
|
|
$no_x_lines = ($image_x - 1) / 5;
|
|
|
|
for ( $i = 0; $i <= $no_x_lines; $i++ )
|
|
{
|
|
ImageLine( $im, $i * $no_x_lines, 0, $i * $no_x_lines, $image_y, $grey );
|
|
ImageLine( $im, $i * $no_x_lines, 0, ($i * $no_x_lines)+$no_x_lines, $image_y, $grey );
|
|
}
|
|
|
|
$no_y_lines = ($image_y - 1) / 5;
|
|
|
|
for ( $i = 0; $i <= $no_y_lines; $i++ )
|
|
{
|
|
ImageLine( $im, 0, $i * $no_y_lines, $image_x, $i * $no_y_lines, $grey );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//-----------------------------------------
|
|
// Can we use fonts?
|
|
//-----------------------------------------
|
|
|
|
if ( $allow_fonts AND function_exists('imagettftext') AND is_array( $fonts ) AND count( $fonts ) )
|
|
{
|
|
if ( function_exists('imageantialias') )
|
|
{
|
|
imageantialias( $im, TRUE );
|
|
}
|
|
|
|
$num = strlen($content);
|
|
$x_param = -18;
|
|
$y_param = 0;
|
|
$_font = $fonts[ mt_rand( 0, count( $fonts ) - 1 ) ];
|
|
|
|
for( $i = 0; $i < $num; $i++ )
|
|
{
|
|
$y_param = rand( 35, 48 );
|
|
|
|
# Main color
|
|
$col_r = rand(50,200);
|
|
$col_g = rand(0,150);
|
|
$col_b = rand(50,200);
|
|
# High light
|
|
$col_r_l = ( $col_r + 50 > 255 ) ? 255 : $col_r + 50;
|
|
$col_g_l = ( $col_g + 50 > 255 ) ? 255 : $col_g + 50;
|
|
$col_b_l = ( $col_b + 50 > 255 ) ? 255 : $col_b + 50;
|
|
# Low light
|
|
$col_r_d = ( $col_r - 50 < 0 ) ? 0 : $col_r - 50;
|
|
$col_g_d = ( $col_g - 50 < 0 ) ? 0 : $col_g - 50;
|
|
$col_b_d = ( $col_b - 50 < 0 ) ? 0 : $col_b - 50;
|
|
|
|
$color_main = imagecolorallocate( $im, $col_r, $col_g, $col_b );
|
|
$color_light = imagecolorallocate( $im, $col_r_l, $col_g_l, $col_b_l );
|
|
$color_dark = imagecolorallocate( $im, $col_r_d, $col_g_d, $col_b_d );
|
|
$_slant = mt_rand( -20, 40 );
|
|
|
|
if ( $i == 1 OR $i == 3 OR $i == 5 )
|
|
{
|
|
for( $ii = 0 ; $ii < 2 ; $ii++ )
|
|
{
|
|
$a = $x_param + 50;
|
|
$b = mt_rand(0,100);
|
|
$c = $a + 20;
|
|
$d = $b + 20;
|
|
$e = ( $i == 3 ) ? mt_rand( 280, 320 ) : mt_rand( -280, -320 );
|
|
|
|
imagearc( $im, $a , $b , $c, $d, 0, $e, $color_light );
|
|
imagearc( $im, $a+1, $b+1, $c, $d, 0, $e, $color_main );
|
|
}
|
|
}
|
|
|
|
if ( ! $_result = @imagettftext( $im, 24, $_slant, $x_param - 1, $y_param - 1, $color_light, $_font, $content{$i} ) )
|
|
{
|
|
$use_fonts = FALSE;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
@imagettftext( $im, 24, $_slant, $x_param + 1, $y_param + 1, $color_dark, $_font, $content{$i} );
|
|
@imagettftext( $im, 24, $_slant, $x_param, $y_param, $color_main, $_font, $content{$i} );
|
|
}
|
|
|
|
$x_param += rand( 15, 18 );
|
|
|
|
if( $x_param + 18 > $image_x )
|
|
{
|
|
$x_param -= ceil( $x_param + 18 - $image_x );
|
|
}
|
|
}
|
|
|
|
$use_fonts = TRUE;
|
|
}
|
|
|
|
if ( ! $use_fonts )
|
|
{
|
|
//-----------------------------------------
|
|
// Continue with nice background image
|
|
//-----------------------------------------
|
|
|
|
$tmp = imagecreatetruecolor($tmp_x , $tmp_y );
|
|
$tmp2 = imagecreatetruecolor($image_x, $image_y);
|
|
|
|
$white = imagecolorallocate( $tmp, 255, 255, 255 );
|
|
$black = imagecolorallocate( $tmp, 0, 0, 0 );
|
|
$grey = imagecolorallocate( $tmp, 100, 100, 100 );
|
|
$transparent = imagecolorallocate( $tmp2, 255, 255, 255 );
|
|
$_white = imagecolorallocate( $tmp2, 255, 255, 255 );
|
|
|
|
imagefill($tmp , 0, 0, $white );
|
|
imagefill($tmp2, 0, 0, $_white);
|
|
|
|
$num = strlen($content);
|
|
$x_param = 0;
|
|
$y_param = 0;
|
|
|
|
for( $i = 0; $i < $num; $i++ )
|
|
{
|
|
if ( $i > 0 )
|
|
{
|
|
$x_param += rand( 6, 12 );
|
|
|
|
if( $x_param + 18 > $image_x )
|
|
{
|
|
$x_param -= ceil( $x_param + 18 - $image_x );
|
|
}
|
|
}
|
|
|
|
$y_param = rand( 0, 5 );
|
|
|
|
$randomcolor = imagecolorallocate( $tmp, rand(50,200), rand(50,200),rand(50,200) );
|
|
|
|
imagestring( $tmp, 5, $x_param + 1, $y_param + 1, $content{$i}, $grey );
|
|
imagestring( $tmp, 5, $x_param , $y_param , $content{$i}, $randomcolor );
|
|
}
|
|
|
|
imagecopyresized($tmp2, $tmp, 0, 0, 0, 0, $image_x, $image_y, $tmp_x, $tmp_y );
|
|
|
|
$tmp2 = $this->captcha_show_gd_img_wave( $tmp2, 8, true );
|
|
|
|
imagecolortransparent( $tmp2, $transparent );
|
|
imagecopymerge( $im, $tmp2, 0, 0, 0, 0, $image_x, $image_y, 100 );
|
|
|
|
imagedestroy($tmp);
|
|
imagedestroy($tmp2);
|
|
}
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Blur?
|
|
//-----------------------------------------
|
|
|
|
if ( function_exists( 'imagefilter' ) )
|
|
{
|
|
@imagefilter( $im, IMG_FILTER_GAUSSIAN_BLUR );
|
|
}
|
|
|
|
//-----------------------------------------
|
|
// Render a border
|
|
//-----------------------------------------
|
|
|
|
$black = imagecolorallocate( $im, 0, 0, 0 );
|
|
|
|
imageline( $im, 0, 0, $image_x, 0, $black );
|
|
imageline( $im, 0, 0, 0, $image_y, $black );
|
|
imageline( $im, $image_x - 1, 0, $image_x - 1, $image_y, $black );
|
|
imageline( $im, 0, $image_y - 1, $image_x, $image_y - 1, $black );
|
|
|
|
//-----------------------------------------
|
|
// Show it!
|
|
//-----------------------------------------
|
|
|
|
@header( "Content-Type: image/jpeg" );
|
|
|
|
imagejpeg( $im );
|
|
imagedestroy( $im );
|
|
|
|
exit();
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Create wave effect for GD images...
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
/**
|
|
* Create wave effect for GD images
|
|
*
|
|
* @param object Image resource
|
|
* @return object Returned image resource
|
|
* @since 1.0
|
|
*/
|
|
function captcha_show_gd_img_wave( $im, $wave=10 )
|
|
{
|
|
$_width = imagesx( $im );
|
|
$_height = imagesy( $im );
|
|
|
|
$tmp = imagecreatetruecolor( $_width, $_height );
|
|
|
|
$_direction = ( time() % 2 ) ? TRUE : FALSE;
|
|
|
|
for ( $x = 0; $x < $_width; $x++ )
|
|
{
|
|
for ( $y = 0 ; $y < $_height ; $y++ )
|
|
{
|
|
$xo = $wave * sin( 2 * 3.1415 * $y / 128 );
|
|
$yo = $wave * cos( 2 * 3.1415 * $x / 128 );
|
|
|
|
$_x = $x - $xo;
|
|
$_y = $y - $yo;
|
|
|
|
if ( ($_x > 0 AND $_x < $_width) AND ($_y > 0 AND $_y < $_height) )
|
|
{
|
|
$index = imagecolorat($im, $_x, $_y);
|
|
$colors = imagecolorsforindex($im, $index);
|
|
$color = imagecolorresolve( $tmp, $colors['red'], $colors['green'], $colors['blue'] );
|
|
}
|
|
else
|
|
{
|
|
$color = imagecolorresolve( $tmp, 255, 255, 255 );
|
|
}
|
|
|
|
imagesetpixel( $tmp, $x, $y, $color );
|
|
}
|
|
}
|
|
|
|
return $tmp;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Removes extinct captcha sessions
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* Removes extinct captcha sessions
|
|
* Clears out "dead" entries
|
|
*
|
|
* @param string Optional IP address to clear out on
|
|
* @return string void
|
|
*/
|
|
|
|
function captcha_clear_sessions( $ip_address='' )
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$time = time() - 60 * 3600;
|
|
$extra = ( $ip_address ) ? ' OR captcha_ipaddress="'.$ip_address.'"' : '';
|
|
|
|
//-----------------------------------------
|
|
// Remove...
|
|
//-----------------------------------------
|
|
|
|
$this->ipsclass->DB->build_and_exec_query( array( 'delete' => 'captcha',
|
|
'where' => 'captcha_date < ' . $time . $extra ) );
|
|
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Load up the backgrounds
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* Loads up the backgrounds.
|
|
*
|
|
* @return array backgrounds
|
|
*/
|
|
|
|
function _captcha_show_gd_img_get_backgrounds()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$images = array();
|
|
$_path = $this->path_background;
|
|
|
|
if ( $_dir = @opendir( $_path ) )
|
|
{
|
|
while( false !== ( $_file = @readdir( $_dir ) ) )
|
|
{
|
|
if ( preg_match( "#\.(gif|jpeg|jpg|png)$#i", $_file ) )
|
|
{
|
|
$images[] = $_path . '/' . $_file;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $images;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
// Load up the fonts
|
|
/*-------------------------------------------------------------------------*/
|
|
/**
|
|
* Loads up the fonts.
|
|
*
|
|
* @return array fonts
|
|
*/
|
|
|
|
function _captcha_show_gd_img_get_fonts()
|
|
{
|
|
//-----------------------------------------
|
|
// INIT
|
|
//-----------------------------------------
|
|
|
|
$fonts = array();
|
|
$_path = $this->path_fonts;
|
|
|
|
if ( $_dir = @opendir( $_path ) )
|
|
{
|
|
while( false !== ( $_file = @readdir( $_dir ) ) )
|
|
{
|
|
if ( preg_match( "#\.(ttf)$#i", $_file ) )
|
|
{
|
|
$fonts[] = $_path . '/' . $_file;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $fonts;
|
|
}
|
|
|
|
}
|
|
|
|
?>
|