PHP中的验证码创建代码无法正常工作

时间:2014-05-09 18:55:11

标签: php captcha

我试图在php中制作验证码。这是我的代码:

$amountChars = 5;
$randString = substr(md5(uniqid()), 0, $amountChars);
$img = imagecreatfromjpeg("noise.jpg");
imageantialias($img, true);

$x = 20;
$y = 35;
$deltaX = 40;

for($i = 0; $i < $amountChars; $i++){
    $size = rand(18, 28);
    $r = rand(0,152);
    $g = rand(0,152);
    $b = rand(0,152);
    $color = imagecolorallocate($img, $r, $g, $b);
    $angle = -30 + rand(0, 60);
    imagettftext($img, $size, $angle, $x, $y, $color, "Blokletters-Balpen.ttf", $randString{$i});
    $x += $deltaX;
}

header("Content-Type: image/png");
imagePNG($img);

问题是,它不起作用。我在一个小时内搜索了一个错误,但没有成功。

2 个答案:

答案 0 :(得分:0)

再试一次,因为我因为没有给出真正的答案而受到抨击......一步一步地浏览你的代码我能够通过以下修改来运行它:

$amountChars = 5;
$randString = substr(md5(uniqid()), 0, $amountChars);
// TYPO: MISSING E
$img = imagecreatefromjpeg("noise.jpg");

// IT'S POSSIBLE THIS FUNCTION ISN'T DEFINED:
// SEE REFERENCE LINK BELOW CODE
// imageantialias($img, true);

$x = 20;
$y = 35;
$deltaX = 40;

for($i = 0; $i < $amountChars; $i++) {
    $size = rand(18, 28);
    $r = rand(0,152);
    $g = rand(0,152);
    $b = rand(0,152);
    $color = imagecolorallocate($img, $r, $g, $b);
    $angle = -30 + rand(0, 60);
    // ADDED ./ TO FONT PATH, CHANGED $randString{$i} TO $randString[$i]
    imagettftext($img, $size, $angle, $x, $y, $color, "./Blokletters-Balpen.ttf", $randString[$i]);
    // WHY IS THIS HERE?
    $x += $deltaX;
}
header("Content-Type: image/png");
imagePNG($img);

imageantialias函数doesn't appear to be available on all systems。我没有,所以我只是评论它。

这些更改至少应该让您的代码正常运行。如果您正在寻找更深入的示例,我建议您查看this tutorial

答案 1 :(得分:-1)

我接受了您的代码,创建了noise.jpg张图片,甚至从这里下载了Blokletters-Balpen.ttf以查看内容是什么。快速查看代码会显示错误信息:

$img = imagecreatfromjpeg("noise.jpg");

不应该是imagecreatefromjpeg吗?请注意原始代码中缺少的e

$img = imagecreatefromjpeg("noise.jpg");

它应该现在可以使用,我想?除非有问题,否则您将其置于<img src="image_capcha.php" />