Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用两个函数输出图像内容类型_Php - Fatal编程技术网

Php 使用两个函数输出图像内容类型

Php 使用两个函数输出图像内容类型,php,Php,我正在使用docroot之外的图像,并希望在函数内部显示该图像 如何正确地执行此操作 以下是我到目前为止所做的:(两个函数都在同一个文件中) 功能页(){ 回声' 测试 “.output().” '; } 函数输出(){ 标题(“内容类型:图像/gif”); readfile('../../../dirOutsideDocRoot/test.gif'); } 这目前将输出图像,但我无法看到上面的“测试”。是否可以使用标题将图像输入页面功能?发送给客户端的最终内容只能有一种内容类型图像或文本。如

我正在使用docroot之外的图像,并希望在函数内部显示该图像

如何正确地执行此操作

以下是我到目前为止所做的:(两个函数都在同一个文件中)

功能页(){
回声'
测试
“.output().” '; } 函数输出(){ 标题(“内容类型:图像/gif”); readfile('../../../dirOutsideDocRoot/test.gif'); }

这目前将输出图像,但我无法看到上面的“测试”。是否可以使用
标题将图像输入页面功能?

发送给客户端的最终内容只能有一种内容类型图像或文本。如果您希望在一个页面中同时使用这两种格式,(当图像未写入文件时)您可以按以下方式在base64中写入图像:

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

听起来,您试图做的是在同一页上显示图像和文本。要做到这一点,您必须创建一个包含文本的页面,并且有一个
img
标记,指向另一个只返回图像的php页面

您的
内容类型
标题告诉浏览器整个页面是一个图像。尽管如此,这种情况也不会发生,因为php会失败,说数据已经发送,所以无法输出头

希望这有帮助

编辑:你也可以像Cthulhu说的那样,用base64嵌入图像,如下所示:

function output(){
    $imgbinary = fread(fopen('../../../dirOutsideDocRoot/test.gif', "r"), filesize($filename));
    echo '<img src="data:image/gif;base64,' . base64_encode($imgbinary).'" />';
}
函数输出(){
$imgbinary=fread(fopen('../../../dirOutsideDocRoot/test.gif',“r”),文件大小($filename));
回声';
}

有关php中base_64编码的更多信息,请参阅。

您应该有两个php页面:

第1页:

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

这种方法的问题是IE只显示一半的图像。当我使用header时,图像在所有浏览器中都能正确显示。@user1709311单独显示文本,不要将其与图像内容一起回显,如果只需要图像,请保留编码
image/gif
。单独显示测试仍然不起作用。一旦我调用了包含header函数的functin,我想要回显的任何内容都会被header覆盖。换句话说,是否可以将图像保存在一个变量中,然后传递它?或者,你能给我一个你所说的例子吗?请?@user1709311查看更新的答案。另外,
file\u get\u contents
还可用于将图像数据存储在变量中,您可以稍后将其回显。谢谢。我已经试过了,但出于某种原因,我在IE上只能看到图像的一半。图像有多大(以KB为单位)?我喜欢他说的分别回显文本的说法,但我不确定我是否理解这应该是什么样子。@user1709311您必须有两个php页面。第一个页面将回显文本和一个
img
标记,该标记指向输出图像的第二个页面。@user1709311 Ah,IE仅支持32KB以内的base64 URI。看见
$img = fread(fopen($path, "r"), filesize($path));
$base64 = "data:image/gif;base64," . base64_encode($img);
function output(){
    $imgbinary = fread(fopen('../../../dirOutsideDocRoot/test.gif', "r"), filesize($filename));
    echo '<img src="data:image/gif;base64,' . base64_encode($imgbinary).'" />';
}
echo'
    test<br /><img src="page2.php"/>';
header("Content-Type: image/gif");
readfile( '../../../dirOutsideDocRoot/test.gif' );