2010-05-12 89 views
0

我的代码有什么问题。用PHP生成的图像dosn't显示

图像不到风度展现在test2.php文件

文件:test2.php:

<img src = "test.php" /> 

文件: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); 
+0

你试过“查看图像”吗? (意思是,在浏览器中打开图片网址)。 – edwin 2010-05-12 14:43:45

回答

1

代码工作在这里很好。你很可能在你的<?php之前有一些输出,导致header()失败并吐出一条错误信息 - 或者你没有gd-lib。

PS:该图像不是一个很好的验证码。使用ReCAPTCHA可能是更好的解决方案。

+0

也适用于此,+1表示之前的输出。即使是空白字符也会导致问题。 – Mathew 2010-05-12 15:04:14

0

我认为要么你的脚本中有一个错误,执行失败或有一些额外的输出损坏图像数据。这可以是PHP块之前的单个空白字符(导致header失败)甚至PHP错误消息。

尝试添加一些错误处理。在imagepng通话和测试之前,移动header通话权,如果HTTP标头尚未发送(见headers_sent):

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

然后直接调用脚本直接看到输出。