我目前正在为我目前为学校项目开发的网站开发验证码系统.. http://rjtestsystem.atwebpages.com/
这是我到目前为止提出的代码,错误的原型:
<?php
if (isset($_GET['METHOD']) && $_GET['METHOD']=='captcha')
{ session_start();
$code=rand(1000,9999);
$_SESSION["code"] = $code;
session_write_close();
$font = rand(1,4).".ttf";
if ($font == "1.ttf")
$font_size = 20;
else if ($font == "2.ttf")
$font_size = 25;
else if ($font == "3.ttf")
$font_size = 30;
else if ($font == "4.ttf")
$font_size = 35;
$angle = 0;
$width = 120;
$height = 60;
$bounding_box = imagettfbbox($font_size, $angle, $font, $code);
$textwidth = abs($bounding_box[4] - $bounding_box[0]);
$textheight = abs($bounding_box[5] - $bounding_box[1]);
$x = ($width - $textwidth) / 2;
$y = (($height*3/4) + $textheight) / 2;
$image = imagecreatetruecolor($width, $height);
$text_background = imagecolorallocate($image, 0, 0, 0);
$color = imagecolorallocate($image, 230, 230, 230);
imagefill($image, 0, 0, $text_background);
imageline($image, 0, $y-rand(0,10), $width, $y-rand(0,10), $color);
imageline($image, 0, $y, $width, $y, $color);
imageline($image, 0, $y+rand(0,10), $width, $y-rand(0,20), $color);
imageline($image, $x+rand(0,$width/2), 0, $x+rand($width/2,$width), $height, $color);
imageline($image, $x+rand(0,$width/2), $height, $x+rand($width/2,$width), 0, $color);
for($i=0;$i<400;$i++)
{ imagesetpixel($image,rand()%$width,rand()%$height,$color);
}
imagettftext($image, $font_size, $angle, $x, $y, $color, $font, $code);
header("Cache-Control: no-cache, must-revalidate");
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
exit();
}
?>
<img src = "<?php echo $_SERVER['PHP_SELF']; ?>?METHOD=captcha">
代码似乎运行正常,但是当我尝试将文件移动到其他地方时,系统会给我一条消息,说明该文件正被另一个程序使用。似乎即使在执行代码之后,对TTF文件的引用仍然存在。我试图找到一种方法来阻止这种行为,但我似乎无法使我的搜索正确。好吧,一旦我重新启动服务器,问题就消失了,但调试时却很麻烦。有没有办法或正确的方法来删除TTF文件的引用/文件句柄/等,或者一旦完成就关闭此过程?如果可能,我想继续使用此代码。
我只有一年的Php经验,所以请用我基本的编码和提问方式来承担。如果有人能引导我进行正确的讨论,请做。谢谢。
我正在使用WAMP服务器版本2.4。