我正在开发一个基于PHP的票务管理系统。在创建故障单时,可以上传附件。
我希望每个文件上传一个限制(比如10 MB)
为了实现这一点,我计划以下 -
1.在php.ini中设置
post_max_size = 10M
2.在接收POST的PHP脚本中 由于文件大于post_max_size,$ _FILES []将为空。但是如果大小超过10M,我仍然可以检查内容长度标题并丢弃上传。
在测试时,我尝试上传1 GB的文件并分析了http流量,这就是我发现的。
- >整个1 GB数据首先临时上传到服务器,并在http请求完成后丢弃。虽然我无法确切地找到文件的保存位置(因为它不在服务器的临时目录中),但我的http流量分析器显示浏览器确实向服务器发送了1 GB的数据。
- > PHP脚本执行仅在完成http请求后开始(即在上传整个1 GB后)
现在我有两个问题:
a)人们可能通过尝试上传大文件来利用我的服务器带宽,无论如何我将不得不放弃
b)更糟糕的是,
如果有人开始上传一个巨大的文件(比如100 GB),那么整个100 GB的数据会首先暂时上传到服务器,这意味着在那段时间内,它会占用我服务器上的大量内存。
这是什么常见的解决方案。 我在这里错过了什么吗?