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 IP及IP段进行访问限制的代码
Dec 17 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
Mar 13 PHP
PHP动态创建Web站点的方法
Aug 14 PHP
PHP的构造方法,析构方法和this关键字详细介绍
Oct 22 PHP
php发送post请求的三种方法
Feb 11 PHP
PHP SOCKET编程详解
May 22 PHP
PHP实现通过正则表达式替换回调的内容标签
Jun 15 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
Oct 08 PHP
php中删除、清空session的方式总结
Oct 09 PHP
php使用APC实现实时上传进度条功能
Oct 26 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
为何说PHP引用是个坑,要慎用
Apr 02 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 daodb插入、更新与删除数据
2009/03/19 PHP
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
javascript数组的扩展实现代码集合
2008/06/01 Javascript
javascript 异常处理使用总结
2009/06/21 Javascript
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
JavaScript 学习初步 入门教程
2010/03/25 Javascript
JQuery autocomplete 使用手册
2010/04/01 Javascript
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
2016/01/25 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
Python的Flask框架中web表单的教程
2015/04/20 Python
python八大排序算法速度实例对比
2017/12/06 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
泰国在线书店:SE-ED
2020/06/21 全球购物
女子职高个人自荐书
2014/02/01 职场文书
大学毕业感言100字
2014/02/03 职场文书
艺术教育实施方案
2014/05/03 职场文书
城管大队整治方案
2014/05/06 职场文书
应届生求职自荐信
2014/07/04 职场文书
涉外离婚协议书怎么写
2014/11/20 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
「海贼王」112.9万粉丝纪念图标公布
2022/03/21 日漫
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers