Reputation: 47945
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
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
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
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