2

我有一个应用程序。这使您可以通过 ajax 一次上传多个文件。它适用于大文件,但是一旦达到 2gb+,我就会遇到如下错误:

[Fri Feb 01 11:22:56 2013] [error] [client x.x.x.x] PHP Fatal error:  Out of memory (allocated 2331770880) (tried to allocate 1165449891 bytes) in Unknown on line 0, referer: ...

在我的 php.ini 中,我有这些配置:

post_max_size = 53687091200M
upload_max_filesize = 53687091200M
max_input_time = -1
memory_limit = -1
max_execution_time -1
max_file_uploads = 20

据我所知,这应该足以处理 3GB 的上传。但几乎每次尝试,我都会遇到这些错误。我已经与支持我的 VPS 进行了交谈,他们说一切看起来都很好,应该能够处理它。

我有一个 nginx 反向代理设置,它有点帮助,但还不够。我错过了什么吗?

有没有办法用 PHP 减轻 HTTP 的负担?我测试了 Java 应用程序,它们的表现非常出色,但(不幸的是)我需要保持 UI 完好无损。

4

1 回答 1

2

如果您要上传非常大的文件,您可能希望在将它们传递给 PHP 之前“代理”它们。我的经验是,长期存在的 PHP 线程可能会意外崩溃,而且 PHP 有时会在分配大量内存时遇到问题。

看一下nginx 的上传进度模块,它会在将文件传递到上游服务器(在本例中为 PHP)之前将文件缓冲到磁盘,并提供一种监控和报告进度的机制。

如果您仍然遇到问题,您可以使用上传模块将 PHP 完全排除在外(就管理上传而言) ;只需将文件直接转储到磁盘上您需要它的位置并通知 PHP 它的下落。

于 2013-02-05T15:48:23.660 回答