我的代码有什么不对。
图片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);
答案 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);
然后直接调用脚本直接查看输出。