Php 如何在文件上载时显示进度条

Php 如何在文件上载时显示进度条,php,jquery,Php,Jquery,我正在使用PHPExcel读取一个大型excel文件,并将记录插入数据库。我希望: 从Excel读取数据时显示完成百分比的进度 将行插入/保存到数据库时显示另一个进度条 但我不知道如何才能实现这个进步吧。请给我一个明确的指导,或者如果你知道任何在线教程,请参考它。这是我迄今为止的代码: if(isset($_POST["submit"])) { $objPHPExcel = PHPExcel_IOFactory::load($_FILES['valuation_roll']['tmp_na

我正在使用PHPExcel读取一个大型excel文件,并将记录插入数据库。我希望:

  • 从Excel读取数据时显示完成百分比的进度
  • 将行插入/保存到数据库时显示另一个进度条
  • 但我不知道如何才能实现这个进步吧。请给我一个明确的指导,或者如果你知道任何在线教程,请参考它。这是我迄今为止的代码:

    if(isset($_POST["submit"]))
    {   
    $objPHPExcel = PHPExcel_IOFactory::load($_FILES['valuation_roll']['tmp_name']);
    $sql = "INSERT INTO roll (year_id, reg_division, farm_number, farm_name, usv, extent, owner_id, position, rate, tax_payable, owner_name, identification_no, address1, nationality) VALUES ";
    
    foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
        $worksheetTitle     = $worksheet->getTitle();
        $highestRow         = $worksheet->getHighestRow(); // e.g. 10
        $highestColumn      = $worksheet->getHighestColumn(); // e.g 'F'
        $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
        $nrColumns = ord($highestColumn) - 64;
    
        for ($row = 1; $row <= $highestRow; ++ $row) {
            $sql .= "(";
            $values = "";
            $values .= $_POST["year_id"].", ";
            for ($col = 0; $col < $highestColumnIndex; ++ $col) {
                $cell = $worksheet->getCellByColumnAndRow($col, $row);
                $val = $cell->getValue();
                $values = $val.", ";
            }
            $values = substr($values, 0, -1);
            $sql .= "),";
        }
    }
    $sql = substr($sql, -1);
    echo $sql;
    }
    
    } });

    HTML

    
    
    您可以使用jquery和ajax实现进度条。如何实现?你能给我讲几步吗。如果是你,你会怎么做呢?我会使用ajax调用php代码,这会给我一个选择来放置进度条形码。您可以像这样附加进度条
    $('idwhereprogressbarappear').html('p align=“center”>

    好的,我们正在取得进展。。我会随时通知你的
      $(function() {
    $('form').on('submit', upload_roll);
    
    // Catch the form submit and upload the files
    function upload_roll(event)
    {
      event.stopPropagation(); // Stop stuff happening
      event.preventDefault(); // Totally stop stuff happening
    
      // START A LOADING SPINNER HERE
    
      // Create a formdata object and add the files
      var data = new FormData();
      data.append('file', $('input[type=file]')[0].files[0]);
      $("#progress-bar").addClass("active");
      var progressbar = $( "#progress-bar" ),
          progressLabel = $( "#update" );
      $.ajax({
          url: 'ajax.load.php?year='+$("[name=year_id]").val(),
          type: 'POST',
          data: data,
          contentType: false,
          cache: false,
          processData: false, // Don't process the files
          contentType: false, // Set content type to false as jQuery will tell the server its a query string request
          success: function(data)
          {
             progressbar.progressbar({
               value: false,
               change: function() {
    
                 var ajax_progress = data.split("|");
                 var percentage = (ajax_progress[1] / ajax_progress[2]) * 100
                 $("#progress-bar").css('width', percentage+"%")
                 progressLabel.text(progressbar.progressbar(ajax_progress[0]));
    
               },
               complete: function() {
                 progressLabel.text(ajax_progress[0]);
             }
          });
        }
      });
    
    <div class="progress">
       <div class="progress-bar progress-bar-striped" id="progress-bar" role="progressbar" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100">
        </div>
    </div>
    <span id="update"></span>