我正在尝试创建验证码图像并将值存储在会话变量中。
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()函数时会采用不同的值。