PHP上传进度会话

时间:2012-07-13 19:15:58

标签: php progress-bar

我正在尝试使用PHP创建上传进度条。 我看到了PHP 5.4的新功能:upload progress session

这是我的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设置都是正确的。 (会话已启用,名称和前缀正确)

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

谢谢!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

在一个POST请求中,您无法执行AJAX请求,并在文件上传时读取会话。上传文件后,session.upload_progress.name键将被删除,因此您将获得一个空数组。

答案 2 :(得分:0)

我认为这是因为您的表单未提交,因为您在

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

并初始化间隔,因此页面始终返回null,因为没有上传任何内容。尝试使用http://www.malsup.com/jquery/form,提交表单