【问题标题】:PHP Include for static remote HTML files on a CDN用于 CDN 上的静态远程 HTML 文件的 PHP 包含
【发布时间】:2023-11-20 11:34:01
【问题描述】:

我有一个创建静态 HTML 文件的应用程序。这些文件旨在托管在远程 CDN 上,它们是标准的 .html 文件。

我想知道两件事:

  1. 是否可以对这些文件进行 PHP 包含?
  2. 你这样做能有好的表现吗?

【问题讨论】:

  • 您可以(静态)重定向到 CDN 文件以从 CDN 中受益,或者如果您需要调整它们,也可以将它们缓存在本地服务器上 - 请在此处告诉我们具体用例
  • 我想使用 include 因为我想控制用户看到的 URL。所以我会抓取文件并在特定的 URL 上提供它。
  • 当您想使用包含时,请考虑在本地服务器上缓存文件 - 否则您的服务器需要在每次请求时下载文件。
  • 除非您要优化 Web 服务器的设置及其处理响应的方式,否则我强烈建议您不要从您的服务器提供文件,因为您将失去 CDN 的优势和优化. CDN 不仅用于从最近的边缘位置容纳和提供内容,它们还去除所有不必要的标头、cookie 等,更不用说,它们将处理提供给客户端的资产的压缩和缓存。

标签: php cdn


【解决方案1】:

可以吗?

要直接回答这个问题,是的,从技术上讲,您可以使用 PHP include 函数包含一个远程文件。为此,您只需在 php.ini 中将 allow_url_include 指令设置为 On

根据您打算使用它的确切用途,我还鼓励您查看file_get_contents

要为file_get_contents 启用远程文件,您需要将allow_url_fopen 设置为On

应该这样做吗?

直接回答您的第二个问题,有很多因素会决定您是否会获得良好的性能,但总而言之,它不太可能对性能产生显着影响。

但是,还有其他注意事项:

  • 从安全角度来看,不建议启用这些指令中的任何一个
  • 通过从您的服务器而不是 CDN 交付文件,您将否定 CDN 的所有好处(见下文)
  • 真的有必要吗?

CDN

关于 CDN 的一个常见误解是,它们所做的只是从更近的位置为您的数据提供服务,因此它会使请求稍微快一些......这是错误的!

CDN 有无穷无尽的好处,但我在下面列出了一些(显然取决于配置和提供者):

  • 他们去掉了不必要的标题
  • 不发送任何 cookie,因为 CDN 往往位于不同的域中,因此没有 cookie
  • 他们处理压缩
  • 他们从最近的位置提供您的内容
  • 他们处理缓存
  • ...还有更多

通过从您的服务器提供文件,您将失去上述所有好处,当然,除非您将服务器设置为以相同的方式处理请求(这可能需要时间)。

总结;就个人而言,我会避免将您的 .html 文件远程包含到 PHP 中,而直接从 CDN 将它们提供给客户端。

要了解如何进一步优化您的网站,以及了解大多数 CDN 提供的诸多好处,请查看GTMetrix

【讨论】: