markzzz
markzzz

Reputation: 47945

PHP - Trouble with display a GD image

I made a php file, called createCaptcha.php, and the code is this :

create_image(); 
exit(); 

function create_image() { 
    //Let's generate a totally random string using md5 
    $md5_hash = md5(rand(0,999)); 
    //We don't need a 32 character long string so we trim it down to 5 
    $security_code = substr($md5_hash, 15, 5); 

    //Set the session to store the security code
    $_SESSION["security_code"] = $security_code;

    //Set the image width and height 
    $width = 100; 
    $height = 20;  

    //Create the image resource 
    $image = ImageCreate($width, $height);  

    //We are making three colors, white, black and gray 
    $white = ImageColorAllocate($image, 255, 255, 255); 
    $black = ImageColorAllocate($image, 0, 0, 0); 
    $grey = ImageColorAllocate($image, 204, 204, 204); 

    //Make the background black 
    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); 

    //Tell the browser what kind of file is come in 
    header("Content-Type: image/jpeg"); 

    //Output the newly created image in jpeg format 
    ImageJpeg($image); 

    //Free up resources
    ImageDestroy($image); 
} 

Now, when I try to do an include('createCaptcha.php'); I get this warning :

Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\gtw\index.php:14) in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\gtw\registration\createCaptcha.php on line 43

And the output is a series of incomprensible bits (I think the ones which rapresent the image). In fact I setup the header before. How can I fix this problem?

Upvotes: 0

Views: 1714

Answers (3)

aphonicx
aphonicx

Reputation: 1

Headers already sent means that you have already output something earlier on the page.

If you echo out something before header() is sent, the browser will be sent a header automatically.

Upvotes: 0

bensiu
bensiu

Reputation: 25564

do not include 'createCaptcha.php' call it

<img src="path/to/your/script/createCaptcha.php"/>

your index.php which include 'createCaptcha.php' is sending header first and it conflict header for jpg - Sjoerd explain it more whan well

and also exit() is not needed

Upvotes: 3

Sjoerd
Sjoerd

Reputation: 75588

Don't output anything before calling create_image(). Apparently index.php is outputting something on line 14.

If there is already content sent to the client, the headers can no longer be modified, so the server can not tell the browser that the content is actually a JPEG file instead of an HTML file.

Upvotes: 2

Related Questions