5

在四处打听和做一些研究时,似乎很多人确实在推动 X-Sendfile 作为从 PHP 脚本向基于浏览器的客户端提供大型可下载文件的首选方法。

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

  • 流式传输
  • 流式 cURL
  • 文件获取内容
  • 卷曲
  • X-发送文件

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

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

我的问题是:是什么让 X-Sendfile 变得更好?如果它这么好,为什么我没有听到很多关于它的消息,为什么它没有被更频繁地使用?最后,大多数典型的低预算共享网络主机是否支持 X-Sendfile?

谢谢!

4

1 回答 1

3

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

然而,“典型的低预算共享网络主机”不太可能支持它。考虑一下您是否真的想针对他们;这通常还涉及支持过时的 PHP 版本、讨厌的配置(启用 safe_mode 和/或 magic_quotes)以及缺少诸如 PDO 之类的 PHP 模块(在最近的 PHP 版本中总是启用,但请参阅我之前的观点之一)。

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

于 2012-06-29T14:20:50.953 回答