【问题标题】:Use php's readfile() or redirect to display a image file?使用 php 的 readfile() 或重定向显示图像文件?
【发布时间】:2010-11-06 06:19:40
【问题描述】:

我在 webroot 之外有一个目录,其中包含图像、css 和 javascripts。
这些文件经常更改。
我可以编写一个脚本来定位文件,找出 MIME 类型并将其输出到浏览器。
或者
我可以定位文件,将其复制到可访问的网络上目录并使用标头位置重定向到该文件。当再次请求文件时,首先会检查文件是否被修改,然后再次重定向。

什么是更好的表现方式?每个请求一个读取文件,或者每个请求一个时间戳检查和重定向(所以 2 个请求而不是一个)

【问题讨论】:

    标签: php performance


    【解决方案1】:

    性能的第一条规则:基准测试,不要推测。

    我会立即打破第一条规则并推测 readfile 会更快,因为它消除了网络往返。

    您需要多少性能?最快的方法是在完全不同的机器上的子域(例如http://static.mysite.com/foo.jpg)下设置一个单独的静态内容网络服务器,然后让那里的网络服务器处理经常变化的图像/css/javascript文件。

    【讨论】:

    • 我不知道如何对网络服务器进行基准测试(我只是设法让 xdebug 进行分析),并且目前没有太多时间来弄清楚这一点,所以很高兴接受你的话为此 ;) 我确实喜欢静态内容服务器的想法,但现在可能有点过分。
    【解决方案2】:

    另一个建议:如果您可以控制文件系统,您也许可以在图像文件的网络可访问目录中创建一个symbolic link?使用 exec() 调用 'ln' 命令或 也许 PHP symlink() 函数可能会起作用。

    【讨论】:

    • 我考虑过一个符号链接,但那些目录也包含 php 文件,我不希望在 web 可访问的目录中。
    【解决方案3】:

    直接指向文件而不是整个目录的符号链接怎么样?您甚至可以将其设为“静态”文件名,然后让 Web 服务器进行修改时间戳检查和缓存,这可能会快得多。

    当然是基准 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多