PHP 上傳進度條
現在的網站越來越豐富,用戶需要上傳大量的數據,因此上傳功能越來越重要。然而,大文件上傳會花費很長時間,另外使用普通的進度條顯示上傳進度可能不太合適,因為用戶無法清楚地了解上傳剩余時間,這時PHP上傳進度條就非常有用。
比如說,用戶需要上傳一個500MB的電影,使用PHP上傳進度條的話,用戶就可以得到一個包含上傳剩余時間的進度條,而不僅僅是一個不知道什么時候會完成上傳的普通進度條。
以下是如何在PHP中實現上傳進度條的簡單示例。
首先,需要在HTML form中設置enctype屬性為multipart/form-data,以便上傳文件。
例如:
第二步是創建一個處理文件上傳的PHP腳本(這里使用process-form.php)。
在process-form.php中,可以這樣實現上傳進度條:
當用戶通過Ajax調用此腳本時,會返回一個上傳進度百分比和上傳剩余時間。
例如:
最后,只需要在HTML中添加進度條,如下所示:
現在,用戶就可以通過進度條和上傳剩余時間了解上傳進度。
總結
在本文中,我們介紹了如何實現PHP上傳進度條。使用此功能,用戶可以更好地了解文件上傳進度,并在上傳大文件時更為方便。實際上,這僅僅是一個簡單的示例,如果需要更高級的功能,還有更多的選擇可以使用,但是基本原理都是相同的。
現在的網站越來越豐富,用戶需要上傳大量的數據,因此上傳功能越來越重要。然而,大文件上傳會花費很長時間,另外使用普通的進度條顯示上傳進度可能不太合適,因為用戶無法清楚地了解上傳剩余時間,這時PHP上傳進度條就非常有用。
比如說,用戶需要上傳一個500MB的電影,使用PHP上傳進度條的話,用戶就可以得到一個包含上傳剩余時間的進度條,而不僅僅是一個不知道什么時候會完成上傳的普通進度條。
以下是如何在PHP中實現上傳進度條的簡單示例。
首先,需要在HTML form中設置enctype屬性為multipart/form-data,以便上傳文件。
例如:
<form enctype="multipart/form-data" action="process-form.php" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="500000000"> <input name="userfile" type="file"> <input type="submit" value="Upload"> </form>
第二步是創建一個處理文件上傳的PHP腳本(這里使用process-form.php)。
在process-form.php中,可以這樣實現上傳進度條:
<?php //設置文件上傳的目錄,確保這個目錄存在且可寫 $upload_dir = '/upload'; $upload_file = $upload_dir . basename($_FILES['userfile']['name']); //檢查文件是否已上傳, 如果已上傳,那么就刪除 if (file_exists($upload_file)) { unlink($upload_file); } //計算上傳文件的結束時間 $file_size = $_FILES['userfile']['size']; $finish_time = time() + (int)(($file_size / 1024) * 0.2); //輸出隱含的input,以便在Ajax調用時訪問 echo '<input type="hidden" id="upload_finish_time" value="' . $finish_time . '"/>'; //循環上傳 $in = fopen($_FILES['userfile']['tmp_name'], "r"); $out = fopen($upload_file, "w"); while (($data = fread($in, 1024*10))) { fwrite($out, $data); //計算上傳進度百分比 $current_file_size = ftell($in); $uploaded = ($current_file_size / $file_size) * 100; echo '<span id="uploaded_value">' . $uploaded . '</span>'; //sleep以模擬上傳過程 sleep(1); } fclose($in); fclose($out); //上傳完畢后,跳轉到其他頁面 header('Location: other-page.php'); exit(); ?>
當用戶通過Ajax調用此腳本時,會返回一個上傳進度百分比和上傳剩余時間。
例如:
<script type="text/javascript"> var finish_time = parseInt(document.getElementById('upload_finish_time').value); function startTimer() { var uploaded = parseInt(document.getElementById('uploaded_value').innerHTML); if (uploaded === 100) { return; } var remaining = Math.round((finish_time - (new Date().getTime() / 1000))); var percentage = Math.round((uploaded / 100) * remaining); document.getElementById('progress').value = percentage + '%'; setTimeout(function() { startTimer(); }, 1000); } startTimer(); </script>
最后,只需要在HTML中添加進度條,如下所示:
<progress id="progress" max="100" value="0"></progress>
現在,用戶就可以通過進度條和上傳剩余時間了解上傳進度。
總結
在本文中,我們介紹了如何實現PHP上傳進度條。使用此功能,用戶可以更好地了解文件上傳進度,并在上傳大文件時更為方便。實際上,這僅僅是一個簡單的示例,如果需要更高級的功能,還有更多的選擇可以使用,但是基本原理都是相同的。