刷新页面时,php curl请求不会关闭

时间:2016-04-20 10:44:40

标签: php jquery html ajax curl

我有文件输入的html表单并用ajax提交,然后在php中我发出Curl请求并将文件上传到另一台服务器,当文件上传时,我发送另一个ajax请求并获得curl进度,在html上显示它,它目前工作,没有问题。但是当我在文件仍然上传时刷新页面,卷曲请求没有关闭并且仍然在后台运行,我想在刷新页面时,卷曲请求也关闭。

这是我在index.php中的html代码

<!DOCTYPE html>
<html>
<head>
<title>sad</title>
</head>
<body>
<form action="up.php" method="post">
<input type="file" name='file'></input>
<button type="submit">Upload</button>
</form>
<progress id="progress" value="0" max="100"></progress>

<div id="myResultsDiv"></div>


<script type="text/javascript" src="jquery-1.12.3.min.js"></script>
<script type="text/javascript" src="jquery.form.min.js"></script>

<script type="text/javascript">
var progressSetInterval = null;// Global

    $(document).ready(function() {
        var time = Date.now();
       // bind submit handler to form
        $('form').on('submit', function(e) {
            e.preventDefault(); // prevent native submit
            $(this).ajaxSubmit({
                url: 'up.php?t=' + time,
                target: '#myResultsDiv'
            });

            progressSetInterval = setInterval(function(){ 
              $.ajax({
               type: "POST",
               url: "progressFile_" + time + '.txt?t=' + Date.now(),
               success: function(data){
                  $('#progress').attr('value' , data);
                  if(data >= 100) {
                    clearInterval(progressSetInterval);
                  }
               }
           });
        }, 3000);
        });
    });
</script>
</body>
</html>

它是我在up.php上的php代码

<?php
Class Upload {
public $progressFile = '';

public function up($file) {
    flush();
    $ch = curl_init();
    $localfile = $file['tmp_name'];
    $path = 'ftp://dl.mywebsite.com/public_html/' . time() . '_' . $file['name'];
    $fp = fopen($localfile, 'r');
    curl_setopt($ch, CURLOPT_URL, $path);
    curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
    curl_setopt($ch, CURLOPT_UPLOAD, 1);
    curl_setopt($ch, CURLOPT_INFILE, $fp);
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
    curl_setopt($ch, CURLOPT_NOPROGRESS, false);
    curl_setopt($ch, CURLOPT_PROGRESSFUNCTION,function($resource,$dltotal, $dlnow, $ultotal, $ulnow){
            $progress = @round($ulnow / $ultotal * 100);
            file_put_contents($this->progressFile, $progress);
            flush();
        }
    );
    curl_exec($ch);
    $error_no = curl_errno($ch);
    curl_close($ch);
    if ($error_no == 0) {
        echo $path;
    } else {
        echo false;
    }
}
}

$file = $_FILES['file'];

$class = new Upload();
$class->progressFile = 'progressFile_' . $_GET['t'] . '.txt';
$class->up($file);

1 个答案:

答案 0 :(得分:0)

您可以使用onbeforeunload(javascript)并发送Ajax请求来关闭Curl