(php5.4以上支持)
一、php.ini配置:
session.upload_progress.enabled = on
session.upload_progress.cleanup =on
session.upload_progress.prefix = "upload_progress_"
session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
session.upload_progress.freq = "1%"
session.upload_progress.min_freq = "1"
二、客户端:
<form method="post" action="upload.php" target="upload" id="fileupload">
<input type="hidden" name="<?php echo ini_get('session.upload_progress.prefix') ?>" value="text">
<input type="file" name="file1">
<input type="submit" value="上传">
</form>
<!--使上传后不会转到一个新页面-->
<iframe name="upload" src="about:blank" style="display:none"></iframe>
<!--进度条-->
<div id="progress" style="width: 200px;display: none">
<div id="bar" style="width: 0%;background-color: #080;height: 15px"></div>
<div id="label">0%</div>
</div>
<script>
jQuery(function ($) {
$("#form1").submit(function () {
setTimeout(progressbar, 100);
});
function progressbar() {
$("#progress").show();
$.get("{:url('progress')}", {"<?php echo ini_get('session.upload_progress.name'); ?>": "test"}, function (data) {
var i = parseInt(data);
$("#bar").css({"width": i + '%'});
$("#label").text(i + "%");
if (i < 100) {
setTimeout(progressbar, 100);
}
});
}
});
</script>
三、服务器端:
upload.php
session_start();
if(is_uploaded_file($_FILES['file1']['tmp_name']){
$_SESSION['isupload']=1;
move_uploaded_file($_FILES['file1']['tmp_name'],'./upload/'.iconv('utf-8','gbk',$_FILES['file1']['name']));//iconv()为支持中文文件名
}
progress.php
session_start();
$key=ini_get("session.upload_progress.prefix").$_GET[ini_get("session.upload_progress.name")];
if(!empty($_SESSION[$key])){
return ceil($_SESSION[$key]['bytes_processed']/$_SESSION[$key]['content_length']*100);
}else if($_SESSION['isupload']){
$_SESSION['isupload']=0;
return 100;
}else{
return 0;
}