当从rand()函数获取输入字符串时,为什么imagettftext()将不同的字符串值作为输入?

时间:2014-12-14 14:02:44

标签: php reference

我正在尝试创建验证码图像并将值存储在会话变量中。

Captcha.php

<?php
session_start();

function rand_str() {
    $range = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $i0=rand(0,35);
    $i1=rand(0,35);
    $i2=rand(0,35);
    $i3=rand(0,35);
    return $range[$i0].$range[$i1].$range[$i2].$range[$i3];
}
$str_captcha = rand_str();
$_SESSION['captcha'] = $str_captcha;

$im       = imagecreatetruecolor(150, 70);
$color    = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);
imagettftext($im, 20, 0, 30, 30, $color, 'fonts/Ewert-Regular.ttf', $str_captcha);

header('Content-type: image/png');
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, proxy-revalidate');
imagepng($im);
imagedestroy($im);
?>

Check.php

<?php
session_start();
echo $_SESSION['captcha'].'<br>';
?>

我的测试用例


场景1: 例如,如果Check.php给出了DMJF(生成的实际值),那么Captcha.php会给出不同的图像,例如77B0。

如果我使用

$str_captcha = "ABCD";

而不是

$str_captcha = rand_str();

它工作正常。 Captcha.php给出了ABCD图像,Check.php给出了ABCD字符串。

场景2: 如果我使用以下

$i0=11;
$i1=12;
$i2=13;
$i3=14;

而不是

$i0=rand(0,35);
$i1=rand(0,35);
$i2=rand(0,35);
$i3=rand(0,35);

它也可以正常工作。 Captcha.php给出BCDF图像,Check.php给出BCDF字符串。

场景3: 如果我使用以下

$i0=11;
$i1=12;
$i2=rand(0,35);
$i3=rand(0,35);

它也适用于最后两个字符。但前两个字符是不同的。 例如,如果Check.php给出 BC JF(生成的实际值),则Captcha.php会提供部分正确的图像,例如 BC 0M。

请帮助我,为什么函数imagettftext()在使用rand()函数时会采用不同的值。

0 个答案:

没有答案