1

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

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

这是我到目前为止所拥有的:(两个函数都在同一个文件中)

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

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

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

4

3 回答 3

1

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

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

在你的情况下,

data:image/gif;base64,<base64_encoded_image>

请参阅数据 URI 方案


像下面这样的东西会起作用:(未经测试

$img = fread(fopen($path, "r"), filesize($path));
$base64 = "data:image/gif;base64," . base64_encode($img);
于 2012-11-10T20:19:08.337 回答
1

听起来您要做的是在同一页面上显示图像和文本。为此,您必须创建一个包含文本的页面,并有一个img指向另一个 php 页面的标签,该页面只发回图像。

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

希望这可以帮助。

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

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

有关 php 中 base_64 编码的更多信息,请参阅http://php.net/manual/en/function.base64-encode.php

于 2012-11-10T20:19:30.360 回答
1

你应该有两个 php 页面:

第 1 页:

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

第2页:

header("Content-Type: image/gif");
readfile( '../../../dirOutsideDocRoot/test.gif' );
于 2012-11-10T20:34:17.800 回答