2012-04-12 82 views
2

我正在从技术角度考虑一个文件上传API,它将处理大量大(250MB +)文件。PHP处理大文件上传的理想Web服务器?

我想尽可能避免的是Web服务器在文件上传过程中吃掉了整个内存,我知道这在某种程度上是可以避免的。

此外,我无法使用Flash或Silverlight分割文件,这可能会显着降低内存使用量。

据我所知,PHP在很大程度上依赖于其主机Web服务器软件的上传性能。考虑到这一点,Apache是​​最好的工作,还是应该考虑nginx或其他?

如果PHP本身是最大的瓶颈,那么考虑某种混合解决方案会值得吗?如果是这样,它会是什么语言?

+0

在Apache之上的nGinx会先将文件保存到磁盘,然后传输它到Apache/PHP。你也可以控制nGinx中的很多缓冲区和东西。 – diolemo 2012-04-12 16:01:17

回答

2

尽管Daniel Ribeiro说过,但我建议你保持这些上传远离Apache。你需要一个基于事件的服务器(Apache的实现是好的,但恕我直言,不如nginx/lighttpd抛光)。问题只是间接地成为记忆 - 这是关于客户端和带宽的数量。分割文件并不是真的有帮助。

OTOH没有什么能阻止你使用nginx来处理上传和apache来为网站的其他部分提供服务。

通过调整TCP/IP堆栈来处理LFN(大拥塞窗口,tcp窗口缩放),您将获得很多好处。

据我所知,PHP是很大程度上依赖于它的主机的Web服务器软件上载性能

上传的性能无关,与PHP,除非你试图实现上传使用原始套接字/网络在后端使用PHP的套接字。确实,从nginx调用一个(分叉)PHP解释器来处理文件是有意义的 - 因为这个只在文件上传时启动

+0

那么nginx会提供PHP上传脚本和Apache处理其他所有内容?或者nginx本身会进行处理? – 2012-04-12 16:30:00

+0

这取决于你。 Apache是​​nginx的一个非常不同的工具 - 如果你不关心这些差异,只需使用nginx即可 – symcbean 2012-04-12 16:38:41

1

你可以一起使用Apache和Nginx,这就是真的真棒!

两个之间的一些比较将是:

  • Apache是​​基于过程的服务器; nginx,一个基于事件的服务器。
  • Nginx和Lighttpd可能是两个最着名的异步服务器;
  • Apache无疑是最知名的基于流程的服务器。

Further info here

+0

这一切都很好,但为什么? – 2012-04-12 16:08:58

+0

你可以阅读更多以及为什么在链接上。:) – 2012-04-12 16:13:15

+0

“异步服务器”?真?基于事件的服务器必须使用异步I/O,但这并不意味着它是“异步服务器” – symcbean 2012-04-12 16:20:04