通过脚本重定向图像是不好的做法吗?

时间:2012-08-05 19:02:29

标签: php html image

这样做不好吗?

的index.php

<img src = "image.php"/>

image.php

header('location: /location/to/another/image.jpg');

你可能正在考虑这种想法“他为什么要这么做”。以上只是我正在做的一个简单场景,我只是想知道这样做是否“可接受”?

4 个答案:

答案 0 :(得分:4)

当然,你可以这样做,但你可能会注意到PHP也可以只返回图像的字节和相应的标题(内容类型等);如果您所追求的只是让您的图像请求由PHP“解析”。所以你的image.php请求可能是唯一的请求。

请参阅PHP's doc page for fpassthru

上的示例脚本

答案 1 :(得分:1)

它并不可怕,但大多数建议不要在你不需要时重定向链接/网址,因为它会减慢页面加载速度(就像做两个ping而不是一个乘以每个图像一个)

还建议将您的网络服务器配置为执行此类操作。我使用nginx,我已经为一个站点的一部分做了这个(它确认用户已登录以查看他们未发布的文件)。但这是使用x-accel-redirect标头,它不是真正的重定向,而只是告诉服务器它应该提供该特定文件。

答案 2 :(得分:0)

这取决于有多少用户访问此页面。正如 acidzombie24 所提到的,这样的重定向会降低服务器的速度。但是,当您的服务器配置正确且支持Connection: keep-alive时,它不需要第二个连接,而只需要同一连接中的第二个请求。

答案 3 :(得分:0)

根据我的理解,您试图通过在网址末尾添加唯一ID来阻止浏览器缓存这些图片。

当您重定向时,您会告诉标题中的浏览器忘记此请求并向另一个URL发起请求,因此您将收到每个图像请求的两个请求。

而不是强制浏览器在image.php中重定向,您只需加载图像文件,它将具有与重定向浏览器(即没有缓存)相同的效果,但不需要另一个请求。

在HTML中:

<img src="image.php?id=whatever" />

image.php

readfile( 'location/to/another/image.jpg'); // local file system path needed

完成。没有浏览器缓存,也没有其他请求的额外开销。