I'm using xampp for localhost and it works.
It doesn't work online (using 000webhost service), and the code is exactly the same.
I'm using 3 (three) files here to make it work:
enviarmensaje.php (form)
enviar.php (action)
captcha.php
The first one is about the form: enviarmensaje.php
<form id="consulta" action="enviar.php" method="post">
<!-- captcha -->
<label for="captcha"><p>Captcha:</p></label>
<img src="captcha.php" style="display:block" />
<input type="text" size="16" id="captcha" name="captcha" tabindex="45" value="<?php if(isset($_SESSION['e'])) echo isset($_SESSION['raw_captcha']) ? $_SESSION['raw_captcha'] : ""; ?>" required/>
<!-- end captcha -->
<input type="submit" value="Enviar mensaje" tabindex="50" style="margin-top: 30px;">
</form>
The action file, which is enviar.php :
<?php
session_start();
require_once('_includes/funciones.php');
if(strtoupper($_REQUEST["captcha"]) == $_SESSION["captcha"]){
// REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
$_SESSION["captcha"] = md5(rand()*time());
// INSERTA EL CÓDIGO EXITOSO AQUI
$to = "insertmail@here.com";
$subject = "Consulta de {$_POST['nombre']}";
$message = "Consulta de {$_POST['nombre']} <br> {$_POST['telefono']} | {$_POST['email']} <br><br>{$_POST['mensaje']}";
mail($to ,$subject , $message);
$_SESSION['c'] = "<span style=\"color: lime;\">Gracias! Contestaremos su consulta a la brevedad!</span>";
}else{
// REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
$_SESSION["raw_captcha"] = $_REQUEST["captcha"];
$_SESSION["captcha"] = md5(rand()*time());
// INSERTA EL CÓDIGO DE ERROR AQUÍ
$_SESSION['nombre'] = $_POST['nombre'];
$_SESSION['email'] = $_POST['email'];
$_SESSION['telefono'] = $_POST['telefono'];
$_SESSION['mensaje'] = $_POST['mensaje'];
$_SESSION['e'] = "<span style=\"color: red;\">Captcha incorrecto, inténtelo de nuevo.</span>";
}
redirect_to("contacto.php?p=1");
?>
And just in case, the captcha.php
<?php
###########################################################################################
#
# CAPTCHA FÁCIL 1.0
#
# Autor: Alejandro Martín Núñez
# Contact: alemnunez at gmail dot com
# Date: October 10, 2009
#
# COMO USAR CAPTCHA FÁCIL
#
# FORMULARIO
# En el formulario que deseas validar, inserta el siguiente código:
#
# <img src="captcha.php" /><br/>
# <input type="text" size="12" name="captcha" />
#
#
# VERIFICACIÓN
# Al procesar el formulario, compara el contenido del campo que
# completó el usuario con el contenido de $_SESSION["captcha"]
# que generó este programa:
#
# session_start();
# if(strtoupper($_REQUEST["captcha"]) == $_SESSION["captcha"]){
# // REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
# $_SESSION["captcha"] = md5(rand()*time());
# // INSERTA EL CÓDIGO EXITOSO AQUI
# }else{
# // REMPLAZO EL CAPTCHA USADO POR UN TEXTO LARGO PARA EVITAR QUE SE VUELVA A INTENTAR
# $_SESSION["captcha"] = md5(rand()*time());
# // INSERTA EL CÓDIGO DE ERROR AQUÍ
# }
#
#
# OLVIDÁ EL SPAM!
#
###########################################################################################
#create image and set background color
$captcha = imagecreatetruecolor(120,35);
$color = rand(128,160);
$background_color = imagecolorallocate($captcha, $color, $color, $color);
imagefill($captcha, 0, 0, $background_color);
#draw some lines
for($i=0;$i<10;$i++){
$color = rand(48,96);
imageline($captcha, rand(0,130),rand(0,35), rand(0,130), rand(0,35),imagecolorallocate($captcha, $color, $color, $color));
}
#generate a random string of 5 characters
$string = substr(md5(rand()*time()),0,5);
#make string uppercase and replace "O" and "0" to avoid mistakes
$string = strtoupper($string);
$string = str_replace("O","B", $string);
$string = str_replace("0","C", $string);
#save string in session "captcha" key
session_start();
$_SESSION["captcha"]=$string;
#place each character in a random position
putenv('GDFONTPATH=' . realpath('.'));
$font = 'arial.ttf';
for($i=0;$i<5;$i++){
$color = rand(0,32);
if(file_exists($font)){
$x=4+$i*23+rand(0,6);
$y=rand(18,28);
imagettftext ($captcha, 15, rand(-25,25), $x, $y, imagecolorallocate($captcha, $color, $color, $color), $font, $string[$i]);
}else{
$x=5+$i*24+rand(0,6);
$y=rand(1,18);
imagestring($captcha, 5, $x, $y, $string[$i], imagecolorallocate($captcha, $color, $color, $color));
}
}
#applies distorsion to image
$matrix = array(array(1, 1, 1), array(1.0, 7, 1.0), array(1, 1, 1));
imageconvolution($captcha, $matrix, 16, 32);
#avoids catching
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
#return the image
header("Content-type: image/gif");
imagejpeg($captcha);
?>
Here's the website where it should work: http://matricestecnicas.webege.com/contacto.php?p=1