0

我的代码有什么问题。

图像不显示在 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);
4

2 回答 2

1

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

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

于 2010-05-12T14:46:28.170 回答
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);

然后直接调用脚本就可以直接看到输出了。

于 2010-05-12T14:56:37.997 回答