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缓存技术介绍
Nov 25 PHP
PHP获取表单textarea数据中的换行问题
Sep 10 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
phpmailer发送gmail邮件实例详解
Jun 24 PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 PHP
PHP实现的构造sql语句类实例
Feb 03 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
May 11 PHP
php5.3后静态绑定用法详解
Nov 11 PHP
PHP编程实现csv文件导入mysql数据库的方法
Apr 29 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
php实现统计IP数及在线人数的示例代码
Jul 22 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
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
php 操作调试的方法
2012/07/12 PHP
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
Express.JS使用详解
2014/07/17 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
python 魔法函数实例及解析
2019/09/25 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
英国在线泳装店:Simply Swim
2019/05/05 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
List, Set, Map是否继承自Collection接口?
2016/05/16 面试题
西安众合通用.net笔试题
2013/03/18 面试题
另类冲刺标语
2014/06/24 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
经费申请报告范文
2015/05/18 职场文书
企业党建工作总结2015
2015/05/26 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
Filebeat 采集 Nginx 日志的方法
2021/03/31 Servers
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python
Python 绘制多因子柱状图
2022/05/11 Python