【问题标题】:What's The Deal With X-SendFile?X-SendFile 有什么作用?
【发布时间】:2012-06-29 14:19:01
【问题描述】:

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

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

  • 流式 fopen
  • 流式 cURL
  • file_get_contents
  • 卷曲
  • X-Sendfile

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

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

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

谢谢!

【问题讨论】:

  • 没有理由不能通过配置提供多个下载选项。 Sendfile 是最好的,因为它不会占用 PHP 进程。
  • 廉价的虚拟主机无法启用它,因为无法隔离对文件的未经授权的访问。它可以读取 lighttpd 进程可以读取的所有内容。虚拟服务器是您最少需要允许的。但是,是的,它是提供大文件的资源消耗最少且最灵活的方式。有时是唯一的选择,真的。

标签: php curl fopen x-sendfile


【解决方案1】:

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

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

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

【讨论】:

  • 而且下载速度一般比较快。
猜你喜欢
  • 1970-01-01
  • 2011-04-05
  • 2014-04-02
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 2013-09-15
相关资源
最近更新 更多