通过PHP或通过直接链接更快地下载文件?

问题描述:

我需要让用户下载一些文件(例如PDF)。什么会比较长:通过PHP或通过直接链接更快地下载文件?

  • 由PHP(与特定的头文件)发送该文件,
  • 或把它放在HTTP公共文件夹,并得到用户的公共链接下载它(没有PHP帮助)?

在第一种情况下,原始文件可能在私人区域。 但我想这将需要一些时间来发送这个文件的PHP。

那么如何衡量PHP花费的时间来发送文件以及它可以消耗多少内存呢?

P.S.在第一种情况下,当PHP发送头文件和浏览器(如果安装了pdf插件)将尝试在浏览器中打开它,PHP仍在工作,或者它在头文件立即发送后推出整个文件?或者,如果插件没有安装,浏览器会显示“另存为”对话框PHP仍在工作?

+2

PHP花费的时间可以忽略不计。什么会影响你和客户的网络连接。换句话说:你不必测量时间。只实施一个解决方案。 – Gordon 2011-12-20 11:00:25

+0

在PHP发送文件的情况下,用户会看到“另存为”对话框并决定要做什么,PHP会等待用户的回答?内存将被使用?直到用户决定点击保存或取消,对吧? – user1016265 2011-12-20 19:23:24

如果您担心下载速度,它将会很少。

我猜这取决于您的文件有多大,您希望拥有多少下载,以及您的文档应该公开访问,还是客户端的下载速度。

+0

这里主要关心的是内存使用情况。 我在想,单一的Apache会吃少量的内存,然后Apache + PHP。看起来,即使用户在“另存为”对话框中想要做什么,PHP仍会保留花费的内存。你怎么看 ? – user1016265 2011-12-20 19:17:13

+0

是的,PHP可能会使用更多的内存。将该文件作为静态文件提供,我个人认为这是最简单的,最容易实现的。 – 2011-12-21 08:21:14

你用PHP主要问题是它占用的内存 - 每个环节都会创建一个新的进程,这将是可能8M - 20M取决于你的脚本做什么,不管你使用了框架等

出的兴趣,我写了一个symfony应用程序来提供下载,并执行诸如并发限制,带宽限制等。如果您有兴趣查看代码,那么它就是here。 (我本人没有授权,但如果你喜欢,我很乐意使它成为GPL3)。

+0

这是我关心的地方。如果1K人会尝试打开每个自己的文件,该怎么办?如果文件将由Apache单独发送,似乎内存支出将会减少。 – user1016265 2011-12-20 19:21:10

+0

正确。一般来说,如果你想做一些像并发限制这样的事情(如果你使用正确的可选模块,甚至可以通过Apache来完成),你应该只使用脚本化的过程。如果您只想提供基于密码/基于会话的安全性,那么您可以创建无法猜测的目录结构(可能包括散列),并从该结构内部创建符号链接到Web树外的实际文件。可以使用cron-job来删除过期的文件夹。 – halfer 2011-12-21 14:00:23

+0

注意:如果您的PHP进程需要16M,那么1000个并发用户将占用大约16G的RAM - 如果您有自己的服务器,这很好。但是,当然,您可能会限制系统在繁忙时段拒绝超额用户的请求。最后,值得做一些研究,看看你可以合理得到什么级别的请求:网站受欢迎程度的大多数预测都被高估了,imo。 – halfer 2011-12-21 14:03:15