你将如何在php 5.4中实现基本文件上传进度条?

时间:2013-03-07 15:06:31

标签: php javascript file-upload

我注意到这是PHP的改进,已经在PHP 5.4中添加了。

我也理解这会使用SESSION状态,为了显示它,你需要某种Javscript来更新HTML。我相信按下提交按钮会触发javascript。并且可以设置间隔计时器来检查进度。

我想要做的就是让进度更新div的HTML。 (例如25%...... 35%)

到目前为止我的理解:
  - 您需要一个隐藏价值的表格
  - 这将从该名称创建一个SESSION VARIABLE,其中包含信息   - 您需要观察进度才能获得其状态

选项
  - 方法1:使用您可以在线找到的预建的。很少/没有解释它。
  - 方法2:将文件发送到另一个php文件并使用JSinterval检查其进度   - 方法3:有没有办法在同一页面上完成所有操作?

1 个答案:

答案 0 :(得分:0)

<div id="progress"></div>
<form action="/upload.php" method="POST" enctype="multipart/form-data" id="upload">
 <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="upload" />

 <input type="file" name="file" id="file" />
 <input type="submit" value="Upload" onclick="upload()"/>
</form>

    <script>
      //Check Sumbit has been clicked; either onclick or event handler
      //Setup an interval timer updating the 'PROGRESS' div each check
      //Each Interval: Get SESSION VARIABLE status and Update the div 'PROGRESS'
      //Once file has completed; Do we redirect or submit the form?

    function upload()
    {
    var xmlhttp;
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("progress").innerHTML=setInterval(function(){xmlhttp.responseText},500);
        }
      }
    xmlhttp.open("POST","upload_progress.php",true);
    xmlhttp.send();

    }

</script>