qq_37170974 2016-12-28 08:16 采纳率: 0%
浏览 1243

PHP怎么防止别人发送大量无效文件到服务器?

如题,假设PHP设置是默认的8M、2M,如果我同时向服务器发送大文件的话,会消耗大量服务器内存,甚至导致网站崩溃,这问题有解决办法吗?

下面这个是我做的测试代码,同时打开多个相同页面,然后在每个页面选择文件,等js触发自动提交表单

我本地测试,同时打开5个页面,选择的都是500M+的一个文件,当5个页面平均上传进度到50%左右的时候,页面崩溃了

test.html

 <!DOCTYPE html>
<html>
<head>
    <title>form</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="test.php">
    <input type="file" name="file" >
    <input type="submit" name="send" value="Submit">
</form>
<script>
var tt = new Date("2016-12-28 15:25:00").getTime();
var ct = null;

ct = new Date().getTime();

if(ct < tt){
    loop();
}

function loop(){
    setTimeout(function(){
        ct = new Date().getTime();
        console.log('new loop: ' + ct + ' -- ' + tt);
        if(tt > ct){
            loop();
        }else{
            console.log('go submitting');
            document.forms[0].submit();
        }
    }, 1000);

}

</script>
</body>
</html>

test.php

<?php
$name = date("His") . mt_rand(1000,9999) . '.txt';
file_put_contents('./log/'.$name, var_export($_FILES, true));
?>

大概4分钟后:

测试结果

  • 写回答

2条回答 默认 最新

  • threenewbee 2016-12-28 15:41
    关注

    有专门的防ddos的硬防防火墙设备,配置下策略就行,不消耗服务器cpu和带宽。

    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘