Home > Article > Backend Development > PHP file upload progress bar implementation program_PHP tutorial
There are many ways to implement upload progress bars in PHP. For example, ajax is now the mainstream or using iframe to achieve it. Now we will introduce PHP's apc and uploadprogress to achieve the effect of file upload progress bar.
There are currently two methods I know of. One is to use the APC extension module written by Rasmus Lerdorf, the founder of PHP (http://pecl.php.net/package/apc) , another method is to use the PECL extension module uploadprogress (http://pecl.php.net/package/uploadprogress). I will give two examples of separate implementations for reference. More flexible applications can be modified according to your own needs.
APC implementation method:
Install APC, refer to the official documentation for installation, you can use the PECL module installation method to quickly and easily, not explained here
Configure php.ini, set the parameter apc .rfc1867=1, enables APC to support the upload progress bar function, which is explained in the APC source code documentation
Code example:
The code is as follows | Copy code | ||||||||
if ($_SERVER['REQUEST_METHOD'] == 'POST ') { //Upload request
$status['done'] = 1; $status = apc_fetch('upload_'.$_GET['progress_key']); echo json_encode($status);
|
The code is as follows | Copy code |
if($_SERVER['REQUEST_METHOD']=='POST') { if ( is_uploaded_file($_FILES['upfile']['tmp_name'])) { $upload_dir = 'your_path/'; $ext .'); $sessid = $_POST['UPLOAD_IDENTIFIER'] ; $tmpfile = $upload_dir . $sessid; $sessfile = $upload_dir . $sessid .$ext; if ( move_uploaded_file($_FILES['upfile']['tmp_name'],$tmpfile)) { /Upload error } elseif (!empty($_GET['sessid'])) { header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate" ); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Content- Type:text/html;charset=UTF-8"); $unique_id = $_GET['sessid']; $uploadvalues = uploadprogress_get_info($unique_id); if (is_array($uploadvalues)) { echo json_encode($uploadvalues); } else { //Show upload form} |
Integration
Now all that’s left is to hook everything together. You can do this through the progress.php page.
Listing 5. Final progress.php page
" style="background:#FB7">
$id = uniqid("");
?>
function getProgress(){
GDownloadUrl("getprogress.php?progress_key=",
function(percent, responseCode) {
document.getElementById("progressinner").style.width = percent+"%";
if (percent < 100){
setTimeout("getProgress()", 100);
}
});
}
function startProgress(){
document.getElementById("progressouter").style.display="block";
setTimeout("getProgress()", 1000);
}
src="upload.php?id="
style="border: none; height: 100px; width: 400px;" >
?>
代码如下 | 复制代码 |
type="submit" value="Upload!"/> |