views:

47

answers:

2

Hi,

whats wrong with my code.

image dosn't show in test2.php file

File: test2.php:

<img src = "test.php" />

File: test.php

session_start();

$md5_hash = md5(rand(0,999)); 
$security_code = substr($md5_hash, 15, 5); 

$_SESSION["security_code"] = $security_code;

$width = 100;
$height = 20;
header("Content-type: image/png");

$image = ImageCreate($width, $height);  

$white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 0, 0, 0);
$grey = ImageColorAllocate($image, 204, 204, 204);

ImageFill($image, 0, 0, $black); 

//Add randomly generated string in white to the image
ImageString($image, 3, 30, 3, $security_code, $white); 

//Throw in some lines to make it a little bit harder for any bots to break 
imageRectangle($image,0,0,$width-1,$height-1,$grey); 
imageline($image, 0, $height/2, $width, $height/2, $grey); 
imageline($image, $width/2, 0, $width/2, $height, $grey); 

imagepng($image);
imagedestroy($image);
+1  A: 

The code works fine here. You most likely have some output before your <?php which causes the header() to fail and spit out an error message - or you don't have gd-lib.

PS: That image is not a very good captcha. Using ReCAPTCHA would probably be the better solution.

ThiefMaster
Works here too, and +1 for prior output. Even a whitespace char will cause problems.
MatW
A: 

I think that either there is an error in your script that fails the execution or there is some additional output that corrupts the image data. This can be single white space characters before the PHP block (causing header to fail) or even PHP error messages.

Try to add some error handling. Move the header call right before the imagepng call and test if the HTTP header is not already sent (see headers_sent):

if (!headers_sent()) {
    header("Content-type: image/png");
    imagepng($image);
} else {
    echo 'Internal Error';
}
imagedestroy($image);

And then call the script directly to see the output directly.

Gumbo