如何在使用imagettftext后删除对ttf文件的引用?

时间:2015-04-24 15:36:33

标签: php apache wamp imagettftext

我目前正在为我目前为学校项目开发的网站开发验证码系统.. 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。

0 个答案:

没有答案