2017-04-13 54 views
0

我无法通过PHP获取文件上传的进度,我的网站托管的服务器使用的是PHP v5.6。使用PHP获取上传进度

我还在我的cpanel管理器中启用了'uploadprogress'设置。

我试图按照本教程: Tracking Upload Progress with PHP and JavaScript

但我与处理使用Ajax请求的文件上传一些其他的代码合并它。

我的表单代码:

<form id="myForm"> 
     <input type="hidden" value="myForm" name="<?php echo ini_get("session.upload_progress.name"); ?>"> 
     <input type="file" id="file" /> 
     <a href="javascript:uploadFile()">Upload</a> 
    </form> 
    Upload: 
    <div id="process">0%</div> 

Javascript代码: VAR定时器;

function uploadFile() { 
    var uploadFile = $("#file")[0].files[0]; 
    timer = setInterval(getStatus,1000); 

    $.ajax( 
     { 
      url : "upload.php", 
      type: 'POST', 
      data : new FormData($('form')[0]), 
      cache: false, 
      contentType: false, 
      processData: false, 

      xhr: function() { 
       var myXhr = $.ajaxSettings.xhr(); 
       if (myXhr.upload) { 
        // For handling the progress of the upload 
        myXhr.upload.addEventListener('progress', 
         function(e) { 
          if (e.lengthComputable) { 
           if (e.loaded < e.total) { 
            $('#process').html(((e.loaded/e.total) * 100).toFixed(1) + "%"); 
           } else { 
            $('#process').html("Processing upload, please wait."); 
           } 
          } 
         } , false); 
       } 

       return myXhr; 
      }, 
      success: function (response) { 
       $('#process').html(response); 
       clearTimeout(timer); 
      } 
     } 
    ); 
} 

function getStatus() { 
    $.get("progress.php", 
     function(response) { 
      $("#process2").html(response); 
     } 
    ); 
} 

upload.php的

session_start(); 
$uploadedFile = $_FILES["file"]; 

move_uploaded_file($uploadedFile['tmp_name'],$uploadedFile["name"]); 

echo $uploadedFile["name"]." was uploaded"; 

progress.php

session_start(); 

$key = ini_get("session.upload_progress.prefix") . "myForm"; 
if (!empty($_SESSION[$key])) { 
    $current = $_SESSION[$key]["bytes_processed"]; 
    $total = $_SESSION[$key]["content_length"]; 
    echo $current < $total ? ceil($current/$total * 100) : 100; 
} 
else { 
    echo 100; 
} 

不幸的是在我的JS行: $( '#过程')HTML(((e.loaded。/e.total)* 100).toFixed(1)+“%”);

只获取获取请求所需的时间,而不是实际上传文件。

我希望我已经提供了足够的信息来获得一些帮助。

回答

0

您必须确定您的服务器正在使用mod_php运行PHP。

我上nginx的运行Drupal和警告我说,

“您的服务器不能够显示文件上传进度。文件上传进度需要运行PHP与mod_php的Apache服务器。”