2012-07-13 50 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,它提交表格