我有一个应用程序。这允许您通过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应用程序并且它们表现非常出色,但是(不幸的是)我需要保持用户界面。
答案 0 :(得分:1)
如果您要上传非常大的文件,您可能希望在将它们传递给PHP之前“代理”它们。我的经验是,长期存在的PHP线程可能会意外爆炸,并且PHP有时会遇到大量内存分配问题。
查看nginx's upload progress module,它会在将文件传递给上游服务器(在本例中为PHP)之前将文件缓冲到磁盘,并提供监视和报告进度的机制。 / p>
如果您仍然遇到问题,可以使用upload module完全取消PHP(就管理上传而言);只需将文件直接转储到磁盘上您需要的位置,并通知PHP它的位置。