我正在使用apache,PHP。
所以,对于php,即使我设置了最大文件大小,如果有人上传了一个巨大的文件,它会将整个内容上传到服务器,然后PHP返回错误。是对的吗?
当文件大小或请求大小超过特定大小时,我希望Web服务器或PHP停止。
有办法吗?我记得像设置post_max_size或在apache.conf中设置一些东西,但不确定它是否会在文件超过最大限制时停止。
答案 0 :(得分:4)
Apache's LimitRequestBody,afaik,它只是在结束时停止连接....
答案 1 :(得分:2)
无法从服务器端停止此操作 - 在PHP决定是否拒绝该文件之前,该文件仍会被上传。您需要在客户端添加该检测。虽然您无法使用常规HTML表单执行此操作,但Flash上传程序可以在上载开始之前找到文件大小。
在服务器端,你无法对PHP做任何有用的事情 - 在PHP有机会说'不'之前,文件总是已经完全上传。要阻止上传(即通过POST断开客户端部分),你需要一些Web服务器魔法降低堆栈。 Perlbal能够做到这一点。编写自己的Apache模块是一种(强力)解决方案。如果您担心大型上传会占用网络服务器资源,那么在主Web服务器前使用任何类型的轻量级代理都是一种解决方案。
这实际上取决于为什么要限制大型上传。如果要节省用户时间,只需添加指定最大文件大小的消息。如果是服务器资源,请在服务器前使用轻量级代理。如果它是别的,那么它是什么?
答案 2 :(得分:2)
max_execution_time和max_input_time 这些设置定义脚本的最长生命周期以及脚本在接受输入时应花费的时间。如果传输几个兆字节的数据,则max_input_time应该相当高。您可以通过调用脚本中的set_time_limit()函数来覆盖ini文件中max_input_time的设置。
这取自http://www.radinks.com/upload/config.php
如果为这些ini条目设置较低的值,则脚本应在上载完成之前超时
答案 3 :(得分:1)
使用名为MAX_FILE_SIZE
的隐藏字段,其值指示最大文件大小(以字节为单位)。 See Example #1 on this page了解更多信息。
<!-- 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>
答案 4 :(得分:0)
这是一个简单的jquery解决方案How to check file input size with jQuery? 但客户端验证很容易被黑客攻击。
答案 5 :(得分:0)
在php中使用$ _FILES。
if($_FILES['name']['size'] > $limit){
// continue;
}
答案 6 :(得分:0)
使用PHP 5.5中的会话进度功能为每次上传使用计时器(超时),并测量每次上传大小的平均时间。