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

通过PHP或直接链接下载文件更快吗?,php,performance,pdf,Php,Performance,Pdf,我需要让用户下载一些文件(例如,PDF)。更久的是: 通过PHP发送此文件(带有特定的标题) 或者把它放在http公共文件夹中,让用户获得下载它的公共链接(没有PHP帮助) 在第一种情况下,原始文件可能位于专用区域。 但是我认为用PHP发送这个文件需要一些时间 那么,我如何衡量PHP发送文件所花费的时间以及它能消耗多少内存呢 另外,在第一种情况下,当PHP发送头文件时,浏览器(如果安装了pdf插件)将尝试在浏览器内部打开它,PHP是否仍在工作,或者在头文件立即发送后将整个文件推出?或者,如果

我需要让用户下载一些文件(例如,PDF)。更久的是:

  • 通过PHP发送此文件(带有特定的标题)
  • 或者把它放在http公共文件夹中,让用户获得下载它的公共链接(没有PHP帮助)
在第一种情况下,原始文件可能位于专用区域。 但是我认为用PHP发送这个文件需要一些时间

那么,我如何衡量PHP发送文件所花费的时间以及它能消耗多少内存呢


另外,在第一种情况下,当PHP发送头文件时,浏览器(如果安装了pdf插件)将尝试在浏览器内部打开它,PHP是否仍在工作,或者在头文件立即发送后将整个文件推出?或者,如果插件未安装,浏览器将显示“另存为”对话框,PHP仍在工作?

如果您担心下载速度,则该对话框中的内容将很少


我想这取决于你的文件有多大,你希望下载多少,以及你的文档是否可以公开访问,客户端的下载速度。

你对PHP的主要问题是它所消耗的内存-每个链接都会创建一个新的进程,可能是800-2000万,这取决于你的脚本的用途,是否使用框架等


出于兴趣,我编写了一个symfony应用程序来提供下载,并执行诸如并发限制、带宽限制等操作。如果您对代码感兴趣,请参阅。(我还没有授权它本身,但如果您愿意,我很乐意将其设置为GPL3)。

PHP在这两个方面花费的时间可以忽略不计。不同之处在于您和客户的网络连接。换句话说:你不必测量时间。只需实现一个解决方案。若PHP将发送文件,用户将查看“另存为”对话框并决定要做什么,PHP将等待用户回答?内存将被使用吗?直到用户决定单击保存或取消,对吗?这里主要关心的是内存使用情况。我认为单个Apache会比Apache+PHP占用更少的内存。看起来,即使用户在“另存为”对话框中想做什么,PHP也会保留已用的内存。你认为呢?是的,php可能会使用更多的内存。我个人认为将文件作为静态文件提供将是最有益的,也是最容易实现的。这是我在这里关心的问题。如果1K人会尝试打开每个自己的文件呢?若文件将由Apache单独发送,那个么内存开销似乎会更小。正确。一般来说,如果您想做一些奇特的事情,比如并发限制(如果您使用正确的可选模块,甚至可以由Apache来完成),那么您应该只使用脚本化的流程。如果您只想提供基于密码/会话的安全性,那么您可以创建不可用的目录结构(可能包括散列),并创建从该结构内部到web树外部真实文件的符号链接。cron作业可以用来删除过期的文件夹。旁注:如果您的PHP进程需要16M,那么1000个并发用户将占用大约16G的RAM—如果您有自己的服务器,这是很好的。但是,当然,您可以限制您的系统在繁忙时段拒绝多余用户的请求。最后,值得做一些研究,看看你能合理地得到多少级别的请求:imo说,大多数网站受欢迎程度的预测都被高估了。