0

如果您知道如何开发我真正想做的事情,请告诉我。

我有一个代码可以创建这样的图像(类似于验证码):

/* createImg.php */


class createImg{
public function __construct(){
    /*stuff here*/
}

public function showImg(){
    /*stuff here*/
    header("Content-type: image/png");
    imagepng($image);
    imagedestroy($image);
}
}
$img = new createImg();
$img->showImg();

我创建图像的方法如下:

/* index.php */
echo '<img src="createImg.php" />';

一切正常,但我想做的是以下事情,但我不知道如何实现它:

/* index.php */
$img = new createImg();
//and now something like this
echo '<img src="$img->showImg()" />';

我遇到的问题是,如果我使用这种方式,由于函数中的标题,我会在主屏幕中获得图像。有什么办法可以做我想做的事吗?

4

1 回答 1

0

一般来说,您不能在 HTML 页面的中间输出原始图像数据,而这正是您的echo声明试图做的事情。

存在有限的机制,例如data: URI scheme,但它们有重要的限制需要注意,并且可能不适合大多数情况。

相反,您需要有某种方法为您的图像生成一个 URL,其中包含足够的信息来创建正确的图像。对于一个简单的情况,这可能只是类似"/img.php?width=100&height=100&colour=red".

由于您将您的用例描述为“类似于 CAPTCHA”,因此这可能会更复杂,并且可能还需要进行混淆处理,而不仅仅是拼写 URL 中的内容。因此,您需要在服务器端存储一些东西;我可以想到几种方法:

  1. 您可以将图像数据或生成它所需的输入写入 PHP 会话。会话的常见问题,例如锁定,适用。
  2. 您可以将数据保存到数据库中,给它一个唯一的键;图像 URL 可能类似于"/img.php?unique_id=42".
  3. 您可以将生成的图像保存到磁盘,给它一个唯一的文件名。这显然需要某种“垃圾收集”机制,否则您的磁盘最终会被所有这些图像文件填满。
于 2013-03-02T20:45:22.397 回答