如何在上传过程中停止超大file upload?

我使用的是Apache,PHP。

所以,对于PHP,即使我设置了最大文件大小,如果有人上传一个巨大的文件,它会将整个事情上传到服务器,然后PHP返回错误。 是对的吗?

当文件大小或请求大小大于特定大小时,我希望Web服务器或PHP停止。

有没有办法做到这一点? 我记得像设置post_max_size或在apache.conf中设置某些东西,但不知道当文件超过最大限制时它是否会停止。

  • 我不相信客户端validation。 所以,我正在寻找apache或php级别的解决scheme。 🙂

Apache的LimitRequestBody ,afaik,它只是当经过时停止连接….

max_execution_time和max_input_time这些设置定义了脚本的最长生存时间以及脚本接受输入的时间。 如果传输几个兆字节的数据,max_input_time应该是相当高的。 您可以通过调用脚本中的set_time_limit()函数来覆盖max_input_time的ini文件中的设置。

这来自http://www.radinks.com/upload/config.php

如果为这些ini条目设置较低的值,那么脚本在上载完成之前应该超时

不可能从服务器端停止 – 在PHP决定是否拒绝文件之前,文件仍然会被上传。 您需要在客户端添加该检测。 虽然无法使用常规的HTML表单进行此操作,但Flash上​​载程序可以在上载开始之前找到文件大小。

在服务器端,你不能对PHP做任何有用的事情 – 在PHP有机会说'不'之前,这些文件总是被完全上传。 要阻止上传(即,通过POST断开客户端部分),您需要一些Web服务器魔术降低堆栈。 Perlbal能够做到这一点。 编写你自己的Apache模块是一个(暴力)解决方案。 如果您担心大型上传会占用Web服务器资源,那么在您的主Web服务器前使用任何类型的轻量级代理都是一种解决方案。

这真的取决于你为什么要限制大量上传。 如果要节省用户时间,只需添加指定最大文件大小的消息。 如果是服务器资源,请在服务器前使用轻量级代理。 如果是别的东西,那么它是什么?

使用名为MAX_FILE_SIZE的隐藏字段,其值指示最大文件大小(以字节为单位)。 有关更多信息, 请参阅此页上的示例1 。

 <!-- The data encoding type, enctype, MUST be specified as below --> <form enctype="multipart/form-data" action="__URL__" method="POST"> <!-- MAX_FILE_SIZE must precede the file input field --> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <!-- Name of input element determines name in $_FILES array --> Send this file: <input name="userfile" type="file" /> <input type="submit" value="Send File" /> </form> 

这里是一个简单的jQuery解决方案如何使用jQuery检查文件输入大小? 但客户端验证可以很容易地被黑客入侵。

在php中使用$ _FILES。

 if($_FILES['name']['size'] > $limit){ // continue; } 

在PHP 5.5中使用会话进度功能为每个上传使用定时器(超时),并测量每个上传大小的平均时间。