我制作了一个名为createCaptcha.php的php文件,代码如下:
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);
}
现在,当我尝试include('createCaptcha.php');
时,我收到了这个警告:
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
输出是一系列难以理解的位(我认为是那些出现在图像中的位)。实际上我之前设置了标题。我该如何解决这个问题?
答案 0 :(得分:3)
不要包含'createCaptcha.php'来调用它
<img src="path/to/your/script/createCaptcha.php"/>
你的index.php包含'createCaptcha.php'首先发送标题并且它与jpg的标题冲突 - Sjoerd更好地解释它
并且还不需要exit()
答案 1 :(得分:2)
在调用create_image()之前不要输出任何内容。显然,index.php正在第14行输出内容。
如果已经有内容发送到客户端,则无法再修改标头,因此服务器无法告诉浏览器该内容实际上是JPEG文件而不是HTML文件。
答案 2 :(得分:0)
已发送的标头意味着您已经在页面上输出了一些内容。
如果在发送header()之前回显某些内容,浏览器将自动发送标题。