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下MAIL的另一解决方案
Oct 09 PHP
PHP个人网站架设连环讲(三)
Oct 09 PHP
PHP中MD5函数使用实例代码
Jun 07 PHP
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
用PHP实现递归循环每一个目录
Aug 08 PHP
php 删除一个数组中的某个值.兼容多维数组!
Feb 18 PHP
PHP原生模板引擎 最简单的模板引擎
Apr 25 PHP
微信支付的开发流程详解
Sep 13 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
Nov 20 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
PHP crypt()函数的用法讲解
Feb 15 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
Feb 12 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 CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
PHP使用pear实现mail发送功能 windows环境下配置pear
2016/04/15 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
tp5.1框架数据库子查询操作实例分析
2020/05/26 PHP
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
微信小程序 如何保持登录状态
2019/08/16 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
详解JavaScript中的this指向问题
2021/02/05 Javascript
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
详解Python 正则表达式模块
2018/11/05 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
python 并发下载器实现方法示例
2019/11/22 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
python requests库的使用
2021/01/06 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
中学生爱国演讲稿
2013/12/31 职场文书
军训自我鉴定200字
2014/02/13 职场文书
长城英文导游词
2015/01/30 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL