什么是X-SendFile的交易?

时间:2012-06-29 14:19:02

标签: php curl fopen x-sendfile

在询问并进行一些研究时,似乎很多人真的推动X-Sendfile作为从PHP脚本向基于浏览器的客户端提供大型可下载文件的首选方法。

我一直在研究的一些方法是:

  • Streaming fopen
  • Streaming cURL
  • 的file_get_contents
  • 卷曲
  • X-SENDFILE

其中,大多数人都告诉我X-Sendfile是最好的。

问题是,我正在尝试实现一种下载方法,它不仅能够处理大型文件,而且在大多数服务器上都可以广泛使用,因为我写的脚本将被许多其他服务器使用,而不仅仅是我自己的

我的问题是:是什么让X-Sendfile变得更好?如果它太好了,为什么我不能听到很多关于它的原因,为什么不经常使用它呢?最后,大多数典型的低预算共享Web主机是否支持X-Sendfile?

谢谢!

1 个答案:

答案 0 :(得分:3)

它允许Web服务器以任何它认为将文件发送到客户端的最佳方式发送文件。它还支持范围请求(即下载管理器和恢复),只要网络服务器支持它而无需为其编写单行代码。

但是,“典型的低价共享Web主机”不太可能支持它。考虑一下你是否 想要定位它们;通常还涉及支持过时的PHP版本,令人讨厌的配置(启用safe_mode和/或magic_quotes)以及缺少PHP模块(如最近的PHP版本,但是请参阅我之前的一点)。

将文件发送到客户端的任何其他方式都有缺点,PHP需要读取它然后将其作为字符串数据传递给Web服务器(与例如让内核写入相比,效率不高整个文件到套接字)。使用file_get_contents时更糟糕的是 - 您将整个文件读入内存中,这根本不是必需的。