3

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設定は正しいです。(セッションが有効で、名前とプレフィックスが正しい)

私は常に空のセッション配列を取得しています。どうしたの?

ありがとう!

4

3 に答える 3

1

それを整理できなかったので、XMLHTTPREQUESTの「進行」アクションを使用しましたが、うまくいきました。ありがとう!

于 2012-07-14T15:55:25.357 に答える
0

return 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を使用してみてください。フォームが送信されます

于 2012-09-10T05:00:39.937 に答える
0

1 つの POST リクエストでは不可能です。AJAX リクエストを実行し、ファイルのアップロード中にセッションを読み取ることができます。ファイルがアップロードされると、session.upload_progress.nameキーが削除されるため、空の配列が取得されます。

于 2012-07-13T19:50:34.650 に答える