Re: Which CAPTCHA is the besta?
| From: | Al | Date: | Fri, 17 Aug 2007 12:27:24 +0000 |
| Subject: | Re: Which CAPTCHA is the besta? | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-260958@lists.php.net to get a copy of this message | ||
Here's a simple one you can hack to fit your needs.
This a file for generating the captcha image.
<?php
/**
* Makes graphical image of supplied number argument
*/
session_start();
$num_str= $_SESSION['scode_show'];
if(isset($_GET['scode'])) $num_str= $_GET['scode'];
header ("Content-type: image/jpeg");
// $width = 60; //Box size, adjust as required
// $height = 34;
// $font= 'gogobig.gdf'; //pick one
$font= 'addlg10.gdf';
// $font= 'automatic.gdf';
// $font= 5; //default
$font = imageloadfont($font);
$height= imagefontheight($font) + 6;
$width= imagefontwidth($font)*strlen($num_str)+6;
$src = @imagecreate($width, $height) or die("Cannot Initialize new GD image stream");
$background_color = imagecolorallocate($src, 200, 200, 200);
$text_color = imagecolorallocate($src, 20, 20, 255);
imagestring($src, $font, 3, 3, $num_str, $text_color);
imagejpeg($src);
imagedestroy($src);
?>
This is the code snippet for your client page:
/**
* This is a typical use of the catcha code
*
*
*/
//**** Security Code ***********/
$sid= session_id(); //See if session handler exists
if(empty($sid)) session_start(); //This also places a session cookie, if enabled by client's browser
$scode= rand(100, 999); //pick the range as you like. 100 to 999 is probably sufficent
$_SESSION['scode'];
$prev_scode= $_SESSION['scode_show']; //This is the scode the user saw previously and was to enter
$_SESSION['scode_show']= $scode; //Set an new scode; this is used by make_scode_img.php for the label graphic generation
$scode_passed= (isset($_SESSION['scode_passed']))? TRUE:FALSE;
//print_r($_SESSION);
if(!$scode_passed && isset($_POST['scode']) && $_POST['scode']== $prev_scode) $scode_passed= TRUE; //If not set, see if passed
$scode_txt= NULL; //So can be used without a if() test
if(!$scode_passed){
$len= strlen($scode)+2;
$scode_txt .= <<<txt
<form enctype="multipart/form-data" action="{$_SESSION['PHP_SELF']}" name="interview" method="post">
<p>To prevent SPAM, we need you to enter this security number in the box on the right and key Submit.
<img style="margin-right:2em; border:blue 2px solid" src="make_scode_img.php" alt="missing img file">
<input style="margin-right:2em; font-size:10pt" type="text" maxlength= "$len" size="$len" name="scode", value="">
<input style="font-size:11pt" type="submit" name="scode_submit" value="Submit">
</p>
</form>
</body>
</html>
txt;
}
/**
* Note, put this code in the html where you want the log-in to be rendered. Notice, it has an exit; You don't need the if() you don't
* need the exit. $code_txt is NULL unless the $scode_passed is TRUE.
* <?php
* if(!$scode_passed) {
* echo "<p>$scode_txt</p>\n\n";
* exit; //This ends the page
* }
* ?>
*/
if($scode_passed){
Tony Di Croce wrote:
I need a CAPTCHA script.... Which one is the best? (I dont mind if its somewhat difficult).