【发布时间】:2023-03-29 15:25:01
【问题描述】:
目标:
1) 我在 web 根目录之外有一个 images 文件夹,其中放置了来自 web 应用程序的所有图像(每个图像路径都保存在 DB 表中);
2) 我想根据用户的请求获取该图像。
简单吧?
我做到了:
a) 创建一个类来读取图像(具有我记得的所有安全功能和保护措施)。它(成功地)返回使用相应的 mime 类型编码(base64)的图像。
b) 出于演示目的,我创建了一个 index.php,其中包含:
<img src="agivenscript.php?img=name.jpeg">
我在这里唯一的目标是从我的网络应用程序中的任何其他位置调用一个脚本,该脚本输出具有相应 mime 类型的 base64 编码图像。
c) 创建了一个脚本“agivenscript.php”,它通过 GET 接收图像名称,实例化我的类并在一切正常时获取 base64 编码图像。然后它会回显图像。
会发生什么:
- 当我执行输出时 - 使用 echo
'<img src="' . $output64encodedwithmimetype . '">';- 在 agivenscript.php 中,它就像一个魅力; - 另外,如果我把$output64encodedwithmimetype的内容直接放到index.php的src标签里,也是可以的。
- 但是,当我尝试
<img src="agivenscript.php?img=name.jpeg">时它不起作用。
由于 base64 编码的图像显然很好(并且具有 mime 类型),我缺少什么?有什么想法吗?
提前致谢。
【问题讨论】:
-
为什么要将图像存储在 Web 根目录之外?当访问者浏览您的网站时,服务器将处理许多 PHP 请求,您必须自己处理带有适当标头的缓存机制(否则,您提供的图像将不会被缓存,这既不聪明也不利于带宽)。直接提供的图片由浏览器缓存
-
嗨皮埃尔!感谢您的评论。是的,我同意你的看法。我正在制作代码示例,并想展示如何从外部 Web 根目录获取文件(不仅仅是图像)。缓存目前不是主要问题,但我同意它在生产中至关重要。