2012-11-10 22 views
1

我在我的docroot之外使用图像,并且希望在函数内部显示该图像。使用两种功能输出图像内容类型

我该如何正确地做到这一点?

这是我到目前为止有:(这两个功能都在同一个文件)

function page(){ 
    echo' 
    test<br /> 
    '.output().' 
    '; 
} 

function output(){ 
    header("Content-Type: image/gif"); 
    readfile('../../../dirOutsideDocRoot/test.gif'); 
} 

目前这将输出的图像,但我无法看到它上面的“考验”。是否可以使用header将图像导入页面功能?

回答

1

发送给客户端的最终内容只能有一种内容类型。 图片或文字。如果你在一个页面想同时,(当图像没有写入文件)你可以写用base64图像以下列方式:

data:[<MIME-type>][;charset=<encoding>][;base64],<data> 

在你的情况,

data:image/gif;base64,<base64_encoded_image> 

Data URI scheme


一些像下面的事情将工作:(未经测试

$img = fread(fopen($path, "r"), filesize($path)); 
$base64 = "data:image/gif;base64," . base64_encode($img); 
+0

这种方法的问题是,IE浏览器只显示图像的一半。当我使用标题时,图像在所有浏览器中都能正确显示。 – NaN

+0

我不介意分离功能,如果需要的话。 – NaN

+0

@ user1709311单独显示文本,不要与图像内容一起回显,如果只需要图像,请保留编码“image/gif”。 –

1

这听起来像你正在尝试做的是在同一页上显示图像和文字。要做到这一点,你将不得不做一个有文字的页面,并且img标签指向另一个只返回图片的php页面。

您的Content-Type标题告诉浏览器整个页面是图像。虽然,那也不会发生,因为php会失败说数据已经发送,所以它不能输出标题。

希望这会有所帮助。

编辑:你可能还喜欢邪神说,与嵌入的base64形象是这样的:

function output(){ 
    $imgbinary = fread(fopen('../../../dirOutsideDocRoot/test.gif', "r"), filesize($filename)); 
    echo '<img src="data:image/gif;base64,' . base64_encode($imgbinary).'" />'; 
} 

有关base_64编码在PHP的详细信息,请参阅http://php.net/manual/en/function.base64-encode.php

+0

谢谢。我试过这个,但是我能在IE上获得的所有内容都是由于某种原因造成的图像的一半。 – NaN

+0

图像有多大(以KB为单位)? –

+0

我喜欢他所说的关于分开回显文字的内容,但我不确定我是否理解这应该看起来如何。 – NaN

1

你应该有两个PHP页面:

第1页:

echo' 
    test<br /><img src="page2.php"/>'; 

第2页:

header("Content-Type: image/gif"); 
readfile('../../../dirOutsideDocRoot/test.gif');