【问题标题】:Is it bad practice to redirect an image through a script?通过脚本重定向图像是不好的做法吗?
【发布时间】:2012-08-06 03:17:08
【问题描述】:

这样做不好吗?

index.php

<img src = "image.php"/>

image.php

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

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

【问题讨论】:

  • 只要能工作,就可以接受:)这是否是干净的代码是另一回事。
  • 很难说出支持或反对它的理由。
  • 为什么不直接在image.php 中加载/location/to/another/image.jpg
  • 出于好奇,你为什么要这样做?
  • 因为缓存原因需要在末尾添加一个字符串 ?id=438208 这只能在文件中完成,而不是在 html 代码中。

标签: php html image


【解决方案1】:

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

查看PHP's doc page for fpassthru上的示例脚本

【讨论】:

  • 我宁愿通过标头向服务器发送命令以提供图像,而不是通过 php 处理它,但这是一个公平的答案。 +1
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      据我了解,您试图通过在 URL 末尾附加一个唯一 ID 来阻止浏览器缓存这些图像。

      当您重定向时,您会在标头中告诉浏览器忘记此请求并启动对另一个 URL 的请求,因此每个图像请求都会收到两个请求。

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

      在 HTML 中:

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

      image.php:

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

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

      【讨论】:

        猜你喜欢
        • 2015-04-10
        • 2011-05-31
        • 1970-01-01
        • 2019-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-15
        相关资源
        最近更新 更多