PHP+apc+ajax实现的ajax_upload上传进度条代码


Posted in PHP onJanuary 25, 2016

本文实例讲述了PHP+apc+ajax实现的ajax_upload上传进度条代码。分享给大家供大家参考,具体如下:

上传进度条是怎么实现的呢?原理是怎么样的呢?当我们浏览,选择上传后,会产生一个临时文件,上传的时把这个临时文件,上传到服务器,上传完成后,这个临时文件会被删除掉。如果我们能读取这个临时文件的大小,就知道上传进度是多少了,php apc模块可以实现这个功能。

一、安装apc模块

下载地址:http://pecl.php.net/package/apc

tar zxvf APC-3.1.8.tgz
cd APC-3.1.8/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

二、修改php.ini

extension = apc.so
apc.rfc1867 = 1
apc.max_file_size = 200M
upload_max_filesize = 1000M
post_max_size = 1000M
max_execution_time = 600
max_input_time = 600
memory_limit = 128M

修改好后,重起apache或者其他,查看一下

[root@BlackGhost php]# php -m
[PHP Modules]
apc
cgi-fcgi
ctype
curl
date
dom
eAccelerator
。。。。。。。。

三、upload_test.php

<?php
$id = uniqid(rand(), true);
?>
<html>
<script type='text/javascript' src='jquery-1.3.2.js'></script>
<script type='text/javascript' src='ajaxupload.3.1.js'></script>
<script type='text/javascript' src='upload.js'></script>
<body style="text-align:center;">
<h1>上传测试</h1><form enctype="multipart/form-data" id="upload" method="POST">
<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="<?=$id?>" />
<input type="file" id="file" name="file" value=""/><br/><input id="submit" type="submit" value="Upload!" />
</form>
<div id="progressouter" style="width: 500px; height: 20px; border: 1px solid black; display:none;">
<div id="progressinner" style="position: relative; height: 20px; background-color: red; width: 0%; ">
</div>
</div>
<br />
<div id='showNum'></div><br>
<div id='showInfo'></div><br>
</body>
</html>
<script type="text/javascript">
$(document).ready(function(){
form_submit();
});
</script>

APC_UPLOAD_PROGRESS这个有什么用呢?它对上传的文件添加一个标记,就可以在其它的php程序中用这个标记访问它。为apc的读取提供支持。

upload.js异步上传的js文件:

function form_submit (){
new AjaxUpload('#upload', {
action: 'upload.php',
name: 'file',
data: {
APC_UPLOAD_PROGRESS:$("#progress_key").val()
},
autoSubmit: true,
onSubmit: function(file, extension){
$('#progressouter').css('display', 'block');
progress();
},
onComplete: function(file, response){
$("#showInfo").html(response);
}
});
}
function progress (){
$.ajax({
type: "GET",
url: "progress.php?progress_key="+$("#progress_key").val(),
dataType: "json",
cache:false,
success: function(data){
if(data == 0) {
var precent = 0;
} else {
for (i in data) {
if (i == "current") {
var json_current = parseInt(data[i]);
}
if (i == "total") {
var json_total = parseInt(data[i]);
}
}
var precent = parseInt(json_current/json_total * 100);
$("#progressinner").css("width",precent+"%");
$("#showNum").html(precent+"%");
$("#showInfo").html("ok");
}
if ( precent < 100) {
setTimeout("progress()", 100);
}
}
});
}

上面有一点要注意,APC_UPLOAD_PROGRESS:$("#progress_key").val()在这里,key是APC_UPLOAD_PROGRESS如果不是这个的话,apc找不到临时文件的。在这里我为什么要用ajax_upload.js呢,因为jquery自带的ajax,自带参数没有上传文件的,也就是type='file'中的内容,php端根本得不到。

四、upload.php上传文件

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(empty($_FILES["file"]["tmp_name"])){
echo "no file";
die;
}
$tmp_name = $_FILES["file"]["tmp_name"];
$name = dirname($_SERVER['SCRIPT_FILENAME'])."/upload/".$_FILES["file"]["name"];
move_uploaded_file($tmp_name, $name);
echo "<p>File uploaded.</p>";
}
?>

如果文件比较大,就不要用http的方式来上传了,太慢,并且影响网站的稳定性。

五、progress.php取得进度的文件,给ajax调用用的

<?php
if(isset($_GET['progress_key'])) {
$status = apc_fetch('upload_'.$_GET['progress_key']);
if($status['total']!=0 && !empty($status['total'])) {
echo json_encode($status);
} else {
echo 0;
}
}
?>

看一下,ajax 异步请求产生的数据。

PHP+apc+ajax实现的ajax_upload上传进度条代码

php apc ajax 上传进度条

参数说明:

total           文件大小
current       已上传的大小
filename     上传文件名
name          标签名
done          上传成功为1
cancel_upload      用户取消上传,只有上传完成时才有
rate 上传速度,只有上传完成时才有
start_time   开始时间

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php adodb分页实现代码
Mar 19 PHP
php实现的遍历文件夹下所有文件,编辑删除
Jan 05 PHP
PHP开启gzip页面压缩实例代码
Mar 11 PHP
浅析PHP中Collection 类的设计
Jun 21 PHP
PHP向socket服务器收发数据的方法
Jan 24 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
PHP实现的简单缓存类
Jul 29 PHP
PHP实现bitmap位图排序与求交集的方法
Jul 28 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
PHP+Oracle本地开发环境搭建方法详解
Apr 01 PHP
PHP实现的oracle分页函数实例
Jan 25 #PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 #PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 #PHP
crontab无法执行php的解决方法
Jan 25 #PHP
win7安装php框架Yii的方法
Jan 25 #PHP
php结合md5实现的加密解密方法
Jan 25 #PHP
PHP几个实用自定义函数小结
Jan 25 #PHP
You might like
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
javascript 自动填写表单的实现方法
2010/04/09 Javascript
javascript之学会吝啬 精简代码
2010/04/25 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
React实现评论的添加和删除
2020/10/20 Javascript
介绍Python中几个常用的类方法
2015/04/08 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
python中return不返回值的问题解析
2020/07/22 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
python excel和yaml文件的读取封装
2021/01/12 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
pip install命令安装扩展库整理
2021/03/02 Python
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
.NET是怎么支持多种语言的
2015/02/24 面试题
自我鉴定范文
2013/11/10 职场文书
社区党总支书记先进事迹材料
2014/01/24 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
励志演讲稿500字
2014/08/21 职场文书
小学教师教育随笔
2015/08/14 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL