我是PHP OOP的新手,我正在做一个我在网上找到的教程。我发现这个来自tut的代码可能正在创建一个包含图像内容的变量,但我不确定如何验证这一点。这些方法对我来说都是新的。
// read the image file to a binary buffer
$fp = fopen($filename, 'rb')
or die("Image '$filename' not found!");
$buf = '';
while(!feof($fp))
$buf .= fgets($fp, 4096);
// create image
imagecreatefromstring($buf);
}
}
$image = new Image("image.gif");
?>
调用$ image变量以在浏览器中显示图像的最佳方法是什么?起初我认为这是代码应该做的。我没有收到图片未找到的错误,所以至少我可以排除这种情况。我使用的图像是71kb。谢谢!
要添加评论,我看到有一个答案可以解决这个问题,但我很高兴在这个帖子中找到一个直接查看我发布的代码的答案,而不是完全重写的代码。< / p>
答案 0 :(得分:2)
好的,所以当你致电new Image()
时 - 你正在调用__construct()
函数 -
你可能已经知道了。
然而,__construct()
函数没有输出任何内容。
例如,如果您将echo
放在imagecreatefromstring
前面 - 那么您可以看到一些输出。否则,该函数本身不输出任何内容。
但是,对于此函数,您必须告诉PHP如何输出它(echo
用于字符串)
所以,如果有疑问,RTM:
$im = imagecreatefromstring($buf);
if ($im !== false) {
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
}
现在,既然你正在学习oop,那么让我解释一下 -
你的__construct
函数的目的应该是相当明显的 - 但是当你处理对象和类时,你需要分离不同的函数 - 因此,上面的代码片段应该在其中自己的功能,所以最终的结果将是:
<?php
class Image{
private $image; //this variable, or 'property'(in OOP Classes) will be shared
public function __construct($filename){
$fp = fopen($filename, 'rb')
or die("Image '$filename' not found!");
$buf = '';
while(!feof($fp))
$buf .= fgets($fp, 4096);
// create image
$this->image = imagecreatefromstring($buf);
}
public function renderImage(){
if ($this->image !== false) {
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
}
}
}
$image = new Image("image.gif");
$image->renderImage();