用PHP生成的图像不显示

时间:2010-05-12 14:40:04

标签: php image-generation

我的代码有什么不对。

图片dos不显示在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);

2 个答案:

答案 0 :(得分:1)

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

PS:那张图片不是很好的验证码。使用ReCAPTCHA可能是更好的解决方案。

答案 1 :(得分:0)

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

尝试添加一些错误处理。在header调用之前移动imagepng调用并测试是否尚未发送HTTP标头(请参阅headers_sent):

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

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