【问题标题】:Trying to display an echoed image from a PHP script in and `<img src="..."` tag试图在 `<img src="..."` 标签中显示来自 PHP 脚本的回显图像
【发布时间】:2023-03-29 15:25:01
【问题描述】:

目标:

1) 我在 web 根目录之外有一个 images 文件夹,其中放置了来自 web 应用程序的所有图像(每个图像路径都保存在 DB 表中);

2) 我想根据用户的请求获取该图像。

简单吧?

我做到了:

a) 创建一个类来读取图像(具有我记得的所有安全功能和保护措施)。它(成功地)返回使用相应的 mime 类型编码(base64)的图像。

b) 出于演示目的,我创建了一个 index.php,其中包含:

&lt;img src="agivenscript.php?img=name.jpeg"&gt;

我在这里唯一的目标是从我的网络应用程序中的任何其他位置调用一个脚本,该脚本输出具有相应 mime 类型的 base64 编码图像。

c) 创建了一个脚本“agivenscript.php”,它通过 GET 接收图像名称,实例化我的类并在一切正常时获取 base64 编码图像。然后它会回显图像。

会发生什么:

  • 当我执行输出时 - 使用 echo '&lt;img src="' . $output64encodedwithmimetype . '"&gt;'; - 在 agivenscript.php 中,它就像一个魅力;
  • 另外,如果我把$output64encodedwithmimetype的内容直接放到index.php的src标签里,也是可以的。
  • 但是,当我尝试&lt;img src="agivenscript.php?img=name.jpeg"&gt;时它不起作用。

由于 base64 编码的图像显然很好(并且具有 mime 类型),我缺少什么?有什么想法吗?

提前致谢。

【问题讨论】:

  • 为什么要将图像存储在 Web 根目录之外?当访问者浏览您的网站时,服务器将处理许多 PHP 请求,您必须自己处理带有适当标头的缓存机制(否则,您提供的图像将不会被缓存,这既不聪明也不利于带宽)。直接提供的图片由浏览器缓存
  • 嗨皮埃尔!感谢您的评论。是的,我同意你的看法。我正在制作代码示例,并想展示如何从外部 Web 根目录获取文件(不仅仅是图像)。缓存目前不是主要问题,但我同意它在生产中至关重要。

标签: php html image


【解决方案1】:

data: 方案 URL 可以进行 Base64 编码。

image/jpeg(或 png 或其他)的 HTTP 响应不能。您需要提供实际的图像数据而不将其编码为文本。

readfile 可能就是您所需要的。

【讨论】:

  • 谢谢!我希望可以选择将图像作为对 HTML 请求或另一个 PHP 脚本的响应,因此我对代码进行了简单的更改,并且在响应 HTML 请求时,我按照您的建议进行了操作:直接提供图像。有用。谢谢:我在这个问题周围,不明白为什么它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 2016-10-22
  • 2016-11-22
  • 2019-11-27
  • 2021-11-30
  • 2021-10-02
相关资源
最近更新 更多