【发布时间】:2023-03-27 10:49:01
【问题描述】:
我有一个 img 标记,其中定义了 src 值。但是,我不想显示这个 src 值,因为它会损害我的服务器。我被推荐使用虚拟 URL:IMG 标签指的是一个 URL,但是在这个方案中,URL 是一个虚拟的:/uploads/myuser/mypict.jpg 不会直接映射到图像,而是一个rewrite 规则会将此 URL 作为参数传递给 /uploads.php?url=myuser/mypict.jpg 脚本,并且此脚本将能够访问和发送 Web 根目录(Web 服务器根目录)之外的文件内容不适用于脚本的文件处理功能)。 Source
但我不明白img 标记如何访问 PHP 脚本,以及该脚本如何在img 标记中显示图像。
知道如何实现它吗?
更新:
我会给你们所有人一个回答的标记,......但我不能。 我终于找到了一种不带任何参数调用脚本的方法,因为图像的名称和路径都存储在数据库中。我正在使用 Symfony2,所以我将给出我的特定解决方案:
我只是在 Twig 模板中做:
<img src="{{ path('acme_home_seeImage') }}" width="{{ image.width }}" height="{{ image.height }}">
并添加路线:
acme_home_seeImage:
pattern: /seeImage
defaults: { _controller: AcmeHomeBundle:Home:seeImage}
然后,当页面加载时,img 标签触发seeImageAction() 方法,该方法处理以下代码:
public function seeImageAction()
{
if(!isset($_SESSION)) session_start();
header('Content-type: image/png');
if(isset($_SESSION['id'])) {
//call to image in database
$em = $this->getDoctrine()->getEntityManager();
$image = $em->getRepository('AcmeHomeBundle:Image')->find($_SESSION['id']);
readfile($image->getPath());
} else {
readfile('public/img/default.png');
}
}
因为图像与客户端的会话 ID 相关联。
就这样!现在,我可以成功地将上传目录放在Document Root之外,并且我的上传路径保持隐藏。
【问题讨论】:
标签: php html image url symfony