2012-07-13 76 views
3

我想用PHP创建一个上传进度条。 我看到了PHP 5.4的新功能:upload progress sessionPHP上传进度会话

这是我的HTML代码:

<form id="upload" action="ajax/progress.php" method="POST" enctype="multipart/form-data"> 
    <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="dupload" /> 
    <input id="file1" type="file" name="file1" /> 
    <input class="btn primary" type="submit" value="Upload" /> 
</form> 

这是progress.php:

<?php 
session_start(); 

$key = ini_get("session.upload_progress.prefix") . 'dupload'; 

if (!empty($_SESSION[$key])){ 
    $current = $_SESSION[$key]["bytes_processed"]; 
    $total = $_SESSION[$key]["content_length"]; 
    echo $current < $total ? ceil($current/$total * 100) : 100; 
} 
else { 
    var_dump($_SESSION); 
    var_dump($_FILES); 
} 

AJAX:

$('#upload').submit(function() { 
    interval_id = setInterval(function() { 
     $.ajax({ 
      url: "ajax/progress.php6", 
      type: "POST", 
      success: function (data) { 
       console.log(data); 
      } 
     }); 
    }, 200); 
    return false; 
}); 

所有INI设置是正确的。 (会话启用,名称和前缀是正确的)

我总是得到一个空的会话数组。怎么了?

谢谢!

+1

您的阅读不写入会话...它怎么不会是空的 – rlemon 2012-07-13 19:17:31

+0

你是什么意思?文档中没有什么说我应该手动写入会话,它应该自动写入它。 – AdamGold 2012-07-13 20:52:16

+0

如果你的文件真的命名为“progress.php6”? – 2012-07-13 21:02:05

回答

1

无法对其进行排序,因此我使用XMLHTTPREQUEST“进度”操作,并且运行良好。 谢谢!

+1

我认为,这个应该不被接受;)。也许这是一个解决方案,但绝对不是答案... – 2014-06-02 09:10:34

0

在一个POST请求中不可能,您可以执行AJAX请求,并在文件上传时读取会话。上传文件后,将删除session.upload_progress.name密钥,以便获取空数组。

+0

那么我也试过在表单提交之后的每一秒都要设置一个AJAX请求,也是空阵列。 – AdamGold 2012-07-13 20:52:55

+0

你用什么服务器?如果nginx有这个PHP的新功能有一些问题,并且我必须使用iframe + apache来处理进度条:) – 2012-07-21 18:18:09

0

我想这是因为你的表格是没有得到提交,因为你在

$('#upload').submit(function() { 
    interval_id = setInterval(function() { 
     $.ajax({ 
      url: "ajax/progress.php6", 
      type: "POST", 
      success: function (data) { 
       console.log(data); 
      } 
     }); 
    }, 200); 
    return false; 
}); 

返回false,并将其初始化的时间间隔,从而没有被上载的页面总是返回null。尝试使用http://www.malsup.com/jquery/form,它提交表格