Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

php run captcha script on localhost

694 views
Skip to first unread message

Paul Klacher

unread,
May 19, 2013, 7:17:58 AM5/19/13
to
Hi

I'm trying to implement a php html javascript form with captcha validation. I'm trying to run the script from this page:

http://www.white-hat-web-design.co.uk/articles/php-captcha.php

as a localhost page on my computer. Nothing is showing. The @imagecreate is not showing anything.

My system runs windows 7 and Php, MySql and Apache server installed separately. Is there any configuration to do with for instance php.ini or Apache conf file?

I guess I'm missing a simple step at some point;
Thanks for your help

Paul S K

Jeff North

unread,
May 19, 2013, 7:33:09 AM5/19/13
to
On Sun, 19 May 2013 04:17:58 -0700 (PDT), in comp.lang.php Paul
Klacher <pkla...@gmail.com>
Did you try looking at their help page?
http://www.white-hat-web-design.co.uk/blog/php-captcha-security-images-help/
What were the responses from phpinfo?

The Natural Philosopher

unread,
May 19, 2013, 7:47:03 AM5/19/13
to
IIRC the deafult WAMP setup does NOT include the graphics libraries this
code requires.
(gd)

have a look here and check all is as it should be

http://www.php.net/manual/en/image.installation.php

--
Ineptocracy

(in-ep-toc’-ra-cy) – a system of government where the least capable to lead are elected by the least capable of producing, and where the members of society least likely to sustain themselves or succeed, are rewarded with goods and services paid for by the confiscated wealth of a diminishing number of producers.

Paul Klacher

unread,
May 19, 2013, 8:03:03 AM5/19/13
to
Thanks Jeff & Natural Philosopher

So I understand from the link I should tweak the php.ini file

Should I add below switcher anywhere in the file?
Supported image formats
--with-jpeg-dir=DIR
--with-png-dir=DIR
--with-xpm-dir=DIR

Supported font libraries
--with-freetype-dir=DIR
--with-t1lib[=DIR]
--enable-gd-native-ttf


actually there is already something about jpeg in the file, should I uncomment it?
[gd]
; Tell the jpeg decode to ignore warnings and try to create
; a gd image. The warning will then be displayed as notices
; disabled by default
; http://php.net/gd.jpeg-ignore-warning
;gd.jpeg_ignore_warning = 0

Is this automatically working on the online remote server (freehosting) I want to run the captcha code?

Thanks
P

The Natural Philosopher

unread,
May 19, 2013, 8:12:51 AM5/19/13
to
On 19/05/13 13:03, Paul Klacher wrote:
> Thanks Jeff & Natural Philosopher
>
> So I understand from the link I should tweak the php.ini file
>
> Should I add below switcher anywhere in the file?
> Supported image formats
> --with-jpeg-dir=DIR
> --with-png-dir=DIR
> --with-xpm-dir=DIR
>
> Supported font libraries
> --with-freetype-dir=DIR
> --with-t1lib[=DIR]
> --enable-gd-native-ttf
>
>
> actually there is already something about jpeg in the file, should I uncomment it?
> [gd]
> ; Tell the jpeg decode to ignore warnings and try to create
> ; a gd image. The warning will then be displayed as notices
> ; disabled by default
> ; http://php.net/gd.jpeg-ignore-warning
> ;gd.jpeg_ignore_warning = 0

sorry. I am not a windows user.

> Is this automatically working on the online remote server (freehosting) I want to run the captcha code?

write a short script that invokes phpinfo() and run it there. That tells
you what the remote configuration is

i.e. there should be a section like this


gd

GD Support enabled
GD Version 2.0 or higher
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.3.7
T1Lib Support enabled
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled


> Thanks
> P

Paul Klacher

unread,
May 19, 2013, 8:18:25 AM5/19/13
to
i.e. there should be a section like this

True, there is such a section, i'm going to upload captcha scripts and see if it works directly remotly -thanks

Jerry Stuckle

unread,
May 19, 2013, 10:01:00 AM5/19/13
to
A couple of things.

First of all, get rid of the '@' before imagecreate(). All it does is
hide error messages (you should never use it unless you have a VERY good
reason to do so - and even then shy away from using it).

Additionally, the "or die(...)" is bad - it terminates processing of the
script immediately, generating syntactically invalid output.

Next, in your php.ini file, ensure the following are set:

error_reporting = E_ALL
display_errors = on

(These should always be on for a development system while display_errors
should never be on for a production system).

Next, this must be in a separate file called from an img= statement, not
in the code with the rest of your page. What happens when you try
to load the image in your browser directly?

And finally, what does phpinfo() show you?

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstu...@attglobal.net
==================

Paul Klacher

unread,
May 19, 2013, 12:23:24 PM5/19/13
to
Hi Jerry

Thanks for your help.

I have left for a while testing captcha script on localhost and went straight doing test onto the server

But I can't get the script to work at all

In between I have made some of the changes in my php.ini
like
error_reporting = E_ALL
display_errors = on
I checked and it was on.


>>>(These should always be on for a development system while display_errors
should never be on for a production system).
>>>Next, this must be in a separate file called from an img= statement, not
in the code with the rest of your page. What happens when you try
to load the image in your browser directly?

I'll check this after it works online


Below are some html and php extract form file currently online
Running the script online keeps returning
"The captcha code does not match!"

I have added an echo statement for the captcha value and the server value and it displays the same value but it doesn't write to the .txt file (the form is just writing to a text file, not sending an email as the server doesn't allow me to do that... free hosting)

------------------------------------------------------------
index99_comments.html
(the html for the form)
------------------------------------------------------------

<div id="gate_A_resize3_comments"><p id="blackboard"></p>

<form method="POST" name="contact_form" action="index99_.php">

<p>Your Name (Optional)<input type="text" name="name">
>Email Address <input type="text" name="email">
<br />
<p>Message: </p><CENTER>
<textarea name="comments" maxlength="1000" cols="40" rows="12"></textarea></p>

<p><label><img src="index99_test_captcha.php" id='captchaimg' ></label></p>

<p><label for='message'>Enter the code above</label>
<input id="6_letters_code" name="6_letters_code2" type="text"></p>

<p><input type="submit" value="Submit"></center></p>

</form>
</div>

------------------------------------------------------------
index99_.php
------------------------------------------------------------

<?php

$name = $_POST['name'];
$email_from = $_POST['email'];
$comments = $_POST['comments'];
$errors = '';

//Note: the captcha code is compared case insensitively.
//if you want case sensitive match, update the check above to
// strcmp()
if(empty($_SESSION['6_letters_code'] ) || strcasecmp($_SESSION['6_letters_code'], $_POST['6_letters_code2']) != 0){
$errors .= "\n The captcha code does not match!\n";

}

if(!empty($errors)){
echo "Message failed to send \n";
echo "<p class='err'>".nl2br($errors)."</p>";
echo $_SESSION['6_letters_code'];
echo "\n";
echo $_POST['6_letters_code2'];
}

function clean_string($string){
$bad = array("content-type", "bcc:", "to:", "cc", "href");
return str_replace($bad, "", $string);
}

//open the file and choose the mode
if(empty($errors)){

$cmess = "Form details below.\n\n";
$cmess .= "Name : " .clean_string($name)."\n";
$cmess .= "email : " .clean_string($email_from)."\n";
$cmess .= "Comments : ".clean_string($comments)."\n";

$fh = fopen("***", "a");
fwrite($fh, $cmess);

//close the file
fclose($fh);

//header("Location: http://localhost/***");
header("Location: http://***");
}

?>


------------------------------------------------------------
index99_captcha_code_file.php
------------------------------------------------------------

<?php
/*
*
* this code is based on captcha code by Simon Jarvis
* http://www.white-hat-web-design.co.uk/articles/php-captcha.php
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
* http://www.gnu.org/licenses/gpl.html
*/

session_start();
//Settings: You can customize the captcha here
$image_width = 120;
$image_height = 40;
$characters_on_image = 6;
$font = './monofont.ttf';

//The characters that can be used in the CAPTCHA code.
//avoid confusing characters (l 1 and i for example)
$possible_letters = '23456789bcdfghjkmnpqrstvwxyz';
$random_dots = 0;
$random_lines = 20;
$captcha_text_color="0x142864";
$captcha_noice_color = "0x142864";

$code = '';


$i = 0;
while ($i < $characters_on_image) {
$code .= substr($possible_letters, mt_rand(0, strlen($possible_letters)-1), 1);
$i++;
}


$font_size = $image_height * 0.75;
$image = imagecreate($image_width, $image_height);


/* setting the background, text and noise colours here */
$background_color = imagecolorallocate($image, 255, 255, 255);

$arr_text_color = hexrgb($captcha_text_color);
$text_color = imagecolorallocate($image, $arr_text_color['red'], $arr_text_color['green'], $arr_text_color['blue']);

$arr_noice_color = hexrgb($captcha_noice_color);
$image_noise_color = imagecolorallocate($image, $arr_noice_color['red'], $arr_noice_color['green'], $arr_noice_color['blue']);


/* generating the dots randomly in background */
for( $i=0; $i<$random_dots; $i++ ) {
imagefilledellipse($image, mt_rand(0,$image_width), mt_rand(0,$image_height), 2, 3, $image_noise_color);
}


/* generating lines randomly in background of image */
for( $i=0; $i<$random_lines; $i++ ) {
imageline($image, mt_rand(0,$image_width), mt_rand(0,$image_height), mt_rand(0,$image_width), mt_rand(0,$image_height), $image_noise_color);
}


/* create a text box and add 6 letters code in it */
$textbox = imagettfbbox($font_size, 0, $font, $code);
$x = ($image_width - $textbox[4])/2;
$y = ($image_height - $textbox[5])/2;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font , $code);


/* Show captcha image in the page html page */
header('Content-Type: image/jpeg');// defining the image type to be shown in browser widow
imagejpeg($image);//showing the image
imagedestroy($image);//destroying the image instance
$_SESSION['6_letters_code'] = $code;

function hexrgb ($hexstr)
{
$int = hexdec($hexstr);
return array("red" => 0xFF & ($int >> 0x10), "green" => 0xFF & ($int >> 0x8), "blue" => 0xFF & $int);
}
?>


Thanks if you debug/help this out

By the way, I am somehow learning php. I am more a vba programmer... so sorry for php improvisation on syntax.

P

J.O. Aho

unread,
May 19, 2013, 12:58:41 PM5/19/13
to
On 19/05/13 13:17, Paul Klacher wrote:

> I'm trying to implement a php html javascript form with captcha validation. I'm trying to run the script from this page:
> http://www.white-hat-web-design.co.uk/articles/php-captcha.php

Use reCaptcha instead from google
https://developers.google.com/recaptcha/docs/php

As the code you are looking at is unattended for quite many years.


> as a localhost page on my computer. Nothing is showing. The @imagecreate is not showing anything.
> My system runs windows 7 and Php, MySql and Apache server installed separately. Is there any configuration to do with for instance php.ini or Apache conf file?

If you have issues with PHP modules missing, I suggest you look at
www.distrowatch.com and make an upgrade.


--

//Aho

Paul Klacher

unread,
May 19, 2013, 1:17:37 PM5/19/13
to
nothing serious there
just trying to understand basic php syntax and validation... just want it to work

Jerry Stuckle

unread,
May 19, 2013, 4:16:41 PM5/19/13
to
On 5/19/2013 12:23 PM, Paul Klacher wrote:
> Hi Jerry
>
> Thanks for your help.
>
> I have left for a while testing captcha script on localhost and went straight doing test onto the server
>
> But I can't get the script to work at all
>
> In between I have made some of the changes in my php.ini
> like
> error_reporting = E_ALL
> display_errors = on
> I checked and it was on.
>

You did use phpinfo() in a web page, right? Once changing something in
php.ini, you need to stop and restart the web server, and the PHP does
not necessarily reflect what the web server is using.

>
>>>> (These should always be on for a development system while display_errors
> should never be on for a production system).
>>>> Next, this must be in a separate file called from an img= statement, not
> in the code with the rest of your page. What happens when you try
> to load the image in your browser directly?
>
> I'll check this after it works online
>
>
> Below are some html and php extract form file currently online
> Running the script online keeps returning
> "The captcha code does not match!"
>

OK, your echo statements indicate you have session_start() at the
beginning of your code, as it should be (or it wouldn't echo the
$_SESSION value properly).

But if the codes don't match, then there's obviously a difference.
White space, maybe? What do you get if you try something like:

echo '"' . $_SESSION['6_letters_code'] . '"';
> echo "<br>\n"; // "\n" will not generate a nl in HTML
> echo '"' . $_POST['6_letters_code2'] . '"';

This will place quote marks around the exact value in each case, showing
if you have any extra white space in either.
0 new messages