Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当用户反复尝试上载无效的文件类型时,网站崩溃_Php_Http_Tcp - Fatal编程技术网

Php 当用户反复尝试上载无效的文件类型时,网站崩溃

Php 当用户反复尝试上载无效的文件类型时,网站崩溃,php,http,tcp,Php,Http,Tcp,我试图理解一个错误 我有一个允许用户上传CSV的web应用程序。如果文件类型不是CSV,则不会发生任何事情,页面只显示“无效文件类型” 如果用户尝试上载无效的文件类型,并反复单击触发处理上载的PHP文件的按钮,则PHP文件最终会变得无响应,并且站点崩溃,出现以下错误: "tcp_error: The Web Server may be down, too busy, or experiencing other problems preventing it from responding to r

我试图理解一个错误

我有一个允许用户上传CSV的web应用程序。如果文件类型不是CSV,则不会发生任何事情,页面只显示“无效文件类型”

如果用户尝试上载无效的文件类型,并反复单击触发处理上载的PHP文件的按钮,则PHP文件最终会变得无响应,并且站点崩溃,出现以下错误:

"tcp_error: The Web Server may be down, too busy, or experiencing other problems preventing it from responding to requests. You may wish to try again at a later time"
我想这是因为它是一个持久的HTTP连接,并且被请求淹没了

我想知道这个问题的确切来源,如果用户反复尝试上传无效的文件类型,最好的修复方法是避免崩溃

HTML摘录:

<script type="text/javascript">
        function stopUpload(success){
              console.log(success);
              var csv1 = success['csv1'];
              var csv2 = success['csv2'];
              var csv3 = success['csv3'];
              var csv4 = success['csv4'];
              var csvError = success['error'];
              var id = success['id'];
              $('.js-wf-error').text(csvError);
              if (!csvError) {
                runWF(id, csv1, csv2, csv3, csv4);
              }
        }
</script>

<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid

<form id="wf-form" class="js-wf-form" method="post" action="wf/csv-upload.php" enctype="multipart/form-data" target="upload_target">
    <input type="file" name="csv1" value="" class="text ui-widget-content ui-corner-all csv-upload" />
    <input type="file" name="csv2" value="" class="text ui-widget-content ui-corner-all csv-upload" />
    <input type="file" name="csv3" value="" class="text ui-widget-content ui-corner-all csv-upload" />
    <input type="file" name="csv4" value="" class="text ui-widget-content ui-corner-all csv-upload" />
  <a  href="#" onclick="$(this).closest('form').submit(); return false;" type="submit"class="button redButton largeButton run-wf-button">Run Walking Farm</a>
</form>

函数stopUpload(成功){
console.log(成功);
var csv1=成功['csv1'];
var csv2=success['csv2'];
var csv3=success['csv3'];
var csv4=success['csv4'];
var csvError=success['error'];
var id=成功['id'];
$('.js wf error').text(csvError);
如果(!csvError){
runWF(id、csv1、csv2、csv3、csv4);
}
}

尝试试一试。它可能有效,但不能保证: 当通过html表单上传文件时,可能需要几秒钟才能成功上传表单并显示响应页面(PHP)。人们可能会变得不耐烦,并多次单击上载按钮,这可能会导致重复的表单提交或上载。通常情况下,这确实是一个问题&您可能希望防止这种情况发生。 您可以使用javascript这样处理它: 第一步是为submit按钮提供一个唯一的id,例如id=“myButton”:

然后,您的表单标签将类似于:

<form action="wf/cs-vupload.php" method="post"
onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='Uploading to  server,please wait...';"

>

就这样。这个技巧应该适用于大多数现代浏览器(IE 5+、FireFox、Opera等)

还有一种使用Cookie的方法,这些快速修复将阻止多个表单提交。请尝试以下链接:


是的,我错过了一些。很高兴知道这是不是真的。

在我看来,浏览器正在超时,因为您的服务器正忙于处理所有其他(上载)请求

有一个名为
one()
的jQuery方法,它只执行一次事件,应该可以很好地解决这个问题

例如:

<form id="wf-form" class="js-wf-form" method="post" action="wf/csv-upload.php" enctype="multipart/form-data" target="upload_target">
    <input type="file" name="csv1" value="" class="text ui-widget-content ui-corner-all csv-upload" />
    <input type="file" name="csv2" value="" class="text ui-widget-content ui-corner-all csv-upload" />
    <input type="file" name="csv3" value="" class="text ui-widget-content ui-corner-all csv-upload" />
    <input type="file" name="csv4" value="" class="text ui-widget-content ui-corner-all csv-upload" />
  <a  href="#" id="submit_link" type="submit"class="button redButton largeButton run-wf-button">Run Walking Farm</a>
</form>

<script type="text/javascript">
    $("#submit_link").one( "click", function() {
        $("#wf-form").submit();
    });
</script>

$(“提交链接”)。一个(“单击”,函数(){
$(“#wf表格”).submit();
});
为了完整性起见:如果它不是一个链接而是一个按钮,您可以简单地在onClick事件中禁用submit按钮(就在
submit()
之后),以禁止多次提交文件。

您可以将Javascript类用于ajax上载文件和表单类

<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>

    <form id="wf-form" class="js-wf-form" method="post" action="wf/csv-upload.php" enctype="multipart/form-data" target="upload_target">
        <input type="file" name="csv1" value="" class="text ui-widget-content ui-corner-all csv-upload" />
        <input type="file" name="csv2" value="" class="text ui-widget-content ui-corner-all csv-upload" />
        <input type="file" name="csv3" value="" class="text ui-widget-content ui-corner-all csv-upload" />
        <input type="file" name="csv4" value="" class="text ui-widget-content ui-corner-all csv-upload" />
<input type="hidden" value="1000000" name="MAX_FILE_SIZE">
      <a  href="#" onclick="fcsvUpload(); return false;" type="submit"class="button redButton largeButton run-wf-button">Run Walking Farm</a>
    </form>

    <script type="text/javascript">

         function fcsvUpload(){
            var oData = new FormData(document.getElementById("wf-form"));
            var result = true;



            var oReq = new XMLHttpRequest();
            oReq.open("POST", "wf/csv-upload.php", false);

            oReq.send(oData);

            if (oReq.status === 200) {
                return result;
            } else {
                return result;
            }
        });
    </script>

函数fcsvUpload(){
var oData=新表单数据(document.getElementById(“wf表单”);
var结果=真;
var oReq=新的XMLHttpRequest();
open(“POST”,“wf/csv upload.php”,false);
oReq.send(oData);
如果(oReq.status==200){
返回结果;
}否则{
返回结果;
}
});
您在带有iframe的html行中有错误。iframe标记未关闭。也许是因为它不起作用。看:

<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid

为什么不禁用按钮直到返回响应?是的,我想这可能会起作用,我会试试看。不过,我想了解问题的确切原因。当它崩溃时,我连续快速地提出了5-10个请求,效果很好,只有在那之后,当我发出更多请求时,它才崩溃,因此,不清楚问题是新请求是在最后一个请求返回之前发出的,还是由于请求的累积数量造成的……您需要检查服务器日志以了解发生了什么,这似乎不是一个正常的PHP错误,可能是由类似于此问题的QOS引起的?正如我在回答中提到的,服务器仍然忙于处理其他请求。发送新的上载请求不会取消正在进行的上载!它并行处理其中一些线程,这还取决于允许的线程数。
<form id="wf-form" class="js-wf-form" method="post" action="wf/csv-upload.php" enctype="multipart/form-data" target="upload_target">
    <input type="file" name="csv1" value="" class="text ui-widget-content ui-corner-all csv-upload" />
    <input type="file" name="csv2" value="" class="text ui-widget-content ui-corner-all csv-upload" />
    <input type="file" name="csv3" value="" class="text ui-widget-content ui-corner-all csv-upload" />
    <input type="file" name="csv4" value="" class="text ui-widget-content ui-corner-all csv-upload" />
  <a  href="#" id="submit_link" type="submit"class="button redButton largeButton run-wf-button">Run Walking Farm</a>
</form>

<script type="text/javascript">
    $("#submit_link").one( "click", function() {
        $("#wf-form").submit();
    });
</script>
<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>

    <form id="wf-form" class="js-wf-form" method="post" action="wf/csv-upload.php" enctype="multipart/form-data" target="upload_target">
        <input type="file" name="csv1" value="" class="text ui-widget-content ui-corner-all csv-upload" />
        <input type="file" name="csv2" value="" class="text ui-widget-content ui-corner-all csv-upload" />
        <input type="file" name="csv3" value="" class="text ui-widget-content ui-corner-all csv-upload" />
        <input type="file" name="csv4" value="" class="text ui-widget-content ui-corner-all csv-upload" />
<input type="hidden" value="1000000" name="MAX_FILE_SIZE">
      <a  href="#" onclick="fcsvUpload(); return false;" type="submit"class="button redButton largeButton run-wf-button">Run Walking Farm</a>
    </form>

    <script type="text/javascript">

         function fcsvUpload(){
            var oData = new FormData(document.getElementById("wf-form"));
            var result = true;



            var oReq = new XMLHttpRequest();
            oReq.open("POST", "wf/csv-upload.php", false);

            oReq.send(oData);

            if (oReq.status === 200) {
                return result;
            } else {
                return result;
            }
        });
    </script>
<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid