Imagepng让脚本运行两次

时间:2014-05-23 18:39:27

标签: php

不知何故,imagepng使我的脚本运行两次。

header("Content-type: image/png");

if(isset($_GET['token'])) {
    if($core->captchaTokenExists($_GET['token'])){
        $token = $_GET['token'];
        $captchaCode = $core->newCaptcha($token);

        //Image generation
        $imageWidth = 184;
        $imageHeight = 70;
        $image = imagecreatetruecolor($imageWidth, $imageHeight);

        imagettftext($image, 13, 0, 30, 40, imagecolorallocate($image, 50, 50, 50), 'core/font/captcha.ttf', $captchaCode);

        imagepng($image);
        imagedestroy($image);
    }
}

图像上出现的文本是使用newCaptcha($ token)随机生成的。例如,它显示“IGWVID”。但在数据库中显示“JNNYSN”。

我使用以下代码调试php代码,看看会发生什么;

file_put_contents('debug.txt', file_get_contents('debug.txt') . time() . PHP_EOL);

我收到以下输出:

1400870202
1400870202

newCaptcha($令牌):

public function newCaptcha($token) {
    try {
        global $Db;
        $answer = $this->generateString(6);

        $Db->query("UPDATE `captcha` SET `answer` = :answer WHERE `token` = :token");
        $Db->bind(":answer", $answer);
        $Db->bind(":token", $token);
        $Db->execute();

        return $answer;
    } catch (Exception $e) {
        $this->addToResponse('false', $e->getMessage());
    }
}

generateString($长度):

public function generateString($length) {
    $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
    $size = strlen( $chars );
    for( $i = 0; $i < $length; $i++ ) {
        @$str .= $chars[ rand( 0, $size - 1 ) ];
    }
    return $str;
}

为什么要这样做?

编辑:我刚发现标头导致了问题。我删除了标题,并在imagepng代码之前使captchaCode回显,它与数据库中的相同。

编辑2:这只发生在firefox中,但不会发生在chrome中。

0 个答案:

没有答案