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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
图书管理程序(一)
Oct 09 PHP
用php实现像JSP,ASP里Application那样的全局变量
Jan 12 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
Yii编程开发常见调用技巧集锦
Jul 15 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
Jul 18 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 PHP
PHP两种实现无级递归分类的方法
Mar 02 PHP
php创建图像具体步骤
Mar 13 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
Apr 03 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 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
PHP4之真OO
2006/10/09 PHP
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
详解js数组的完全随机排列算法
2016/12/16 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
详解webpack 如何集成第三方js库
2017/06/29 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
Vue核心概念Action的总结
2019/01/18 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
浅析Python中yield关键词的作用与用法
2016/11/29 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
英国虚拟主机服务商:eUKhost
2016/08/16 全球购物
理肤泉俄罗斯官网:La Roche-Posay俄罗斯
2018/07/24 全球购物
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
清洁工岗位职责
2014/01/29 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书