扩展另一个类时,captcha类不起作用

时间:2011-12-05 14:11:27

标签: php class gd captcha

我有一个使用像这样的验证码类的脚本

<?php
@session_start();

require str_replace('\\','/',dirname(__FILE__)) . "/example.extended.class.php";

class Ccaptcha extends ExampleExtended {

private $color1;
private $color2;
private $color3;
private $bgcolor;
private $bg_transparent = true;

private $final_width;

public function __construct() {
    parent::__construct();
    $this->final_width = $this->captcha_width;

    $this->color1   = $this->captcha_color1;
    $this->color2   = $this->captcha_color2;
    $this->color3   = $this->captcha_color3;
    $this->bgcolor = $this->captcha_colorbg;
}

public function CreateCaptcha() {

    // generate random number
    $randomnr = rand(1000, 9999);

    // MD5 it and store in session
    $_SESSION['commax_random_number'] = md5($randomnr);

    // Generate image
    $im = imagecreatetruecolor(200, 200);
    imagesavealpha($im, true);

    $color_1    = imagecolorallocate($im, 120, 180, 240);

    $color_2    = imagecolorallocate($im, 120, 180, 240);

    $color_3    = imagecolorallocate($im, 120, 180, 240);

    $background = imagecolorallocatealpha($im, 0, 0, 0, 127);


    imagefill($im, 0, 0, $background);
    imagestring($im, 100, 50, 50, $randomnr, $color_3);

    // prevent client side  caching
    header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");

    //send image to browser
    header ("Content-type: image/png");
    imagepng($im);
    imagedestroy($im);

}

}

$captcha = new Ccaptcha();
$captcha->CreateCaptcha();

?>

最近在特定的服务器上安装它停止工作,并显示一条消息“图片无法显示,因为它包含错误。

奇怪的是,如果我删除example.extended.class.php的require并删除所有的parent :: __ construct(),它就可以了。好吧,我们会认为在ExampleExtended中输出了一些东西并且弄乱了标题。我去了ExampleExtended并从那里删除了所有内容。只是一个没有内部的类结构。仍然没有。

此外,完全相同的脚本在本地服务器上以及在少数生产服务器上运行良好......

2 个答案:

答案 0 :(得分:1)

要调试此操作,请删除对header ("Content-type: image/png");的调用,以便您可以查看系统发出的错误。您需要确保启用错误报告,如下所示:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', true);

我也不会这样做:

require str_replace('\\','/',dirname(__FILE__)) . "/example.extended.class.php";

但试试这个:

require dirname(__FILE__) . DIRECTORY_SEPARATOR . 'example.extended.class.php';

DIRECTORY_SEPARATOR包含底层文件系统的正确斜杠。

答案 1 :(得分:0)

为了完整起见,我会回答我自己的问题,万一有人可能碰到这个问题。

发生的事情是,在调用第二个类时,该文件已经打开并以 UTF-8模式与BOM 保存,但我的所有文件都是UTF-8而没有BOM。

因此两个文件都存在编码问题。我所要做的就是打开被叫类并将其转换为 UTF-8,无需BOM ,就是这样!

相关问题