PHP的APC模块实现上传进度条


Posted in PHP onOctober 27, 2015

APC模块,它的全称是Alternative PHP Cache。APC可以将所有PHP代码会被缓存起来, 另外它可提供一定的内存缓存功能.但是这个功能并不是十分完美,有报告说如果频繁使用APC缓存的写入功能,会导致不可预料的错误.如果想使用这个功能,可以看看apc_fetch,apc_store等几个与apc缓存相关的函数。
值得高兴的是从5.2开始APC加入了APC_UPLOAD_PROGRESS,解决了困扰大家已久的进度条问题。并且它把原来的上传时把临时文件全部缓存到内存改成了当临时文件达到设定值时就自动保存到硬盘,有效地改善了内存利用状况。
它的作用原理是在上传时候赋予每个上传一个唯一的ID,当PHP 脚本收到一个上传文件时,解释程序将自动检查$_POST数组中名为APC_UPLOAD_PROGRESS 的隐藏字段,它将成为缓存变量,存储关于上传的信息,这样脚本就可以通过上传的ID来访问上传文件的状态信息。

<!?以下为上传表单?>
<form enctype="multipart/form-data" id="upload_form" action="" method="POST">
<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="upid"/>
视频标题:<input type="text" id="subject" name="subject"/>
视频说明:<input type="text" id="content" name="content"/>
视频TAG(以逗号分割)<input type="text" id="tag" name="tags"/>
<input type="file" id="upfile" name="upfile"/>
<input type="submit" id="filesubmit" value="上传" onclick="startProgress(‘upid'); return true;"/>
<!?注意:startProgress(‘upid')中的参数是你从php中分配的唯一上传参数?>
</form>
<!?以下为上传进度条?>
<div id="upstatus" style="width: 500px; height: 30px; border: 1px solid ##ffffde; color:#796140;">
</div
<div id="progressouter" style="width: 500px; height: 20px; border: 3px solid #de7e00; display:none;">
<div id="progressinner" style="position: relative; height: 20px; color:#796140; background-color: #f6d095; width: 0%; "></div>
</div>

最主要的就是那个APC_UPLOAD_PROGRESS的隐藏域,有了它脚本才能去访问目前上传文件的状态,另外加一个显示上传状态的div就好了。
下面是处理Ajax的脚本,用了Jquery框架,json传递消息。

function getProgress(upid){
var url = "<{$siteurl}>epadmin/upprocess";
$.getJSON(
url,
{ progress_key: upid },
function(json){
$("#progressinner").width(json.per+"%");
$("#upstatus").html(‘文件大小:'+json.total+‘KB'+‘ 已上传:'+json.current+‘KB');
if (json.per < 100){
setTimeout(function(){
getProgress(upid);
}, 10);
}else{
$("#upstatus").html("视频上传完成,正在处理数据,请稍后……");
}
}
)
}
function startProgress(upid){
$("#progressouter").css({ display:"block" });
setTimeout(function(){
getProgress(upid);
}, 100);
}

再下来就是读取上传状态的PHP代码了,至于上传文件的处理可以按照平常自己的来写。
//上传文件操作函数,可按照自己的需要编写

function upflvAction()
 {
 if($_SERVER['REQUEST_METHOD']==‘POST'){
 $subject = trim($this->f->filter($this->_request->getPost(‘subject')));
 $content = trim($this->f->filter($this->_request->getPost(‘content')));
 Zend_Loader::loadClass(‘Custom_FlvOp');
 $flv = new Custom_FlvOp;
 $flv->uploadFlv(‘upfile',$subject,$content);
 }
 }
 //这就是读取上传状态的函数了~~
 function upprocessAction()
 {
 if(isset($_GET['progress_key'])) {
 $status = apc_fetch(‘upload_'.$_GET['progress_key']);
 $json = array(
 ‘per'=>$status['current']/$status['total']*100,
 ‘total'=>round($status['total']/1024),
 ‘current'=>round($status['current']/1024),
 );
 require_once("Zend/Json.php");
 echo Zend_Json::encode($json);
 }
 }

好了,现在就可以将其部署自己的站点中了,自己看看效果是不是很酷?

PHP的APC模块实现上传进度条

以上就是PHP的APC模块制作上传进度条的关键点介绍,希望对大家的学习有所启发,对大家有所帮助。

PHP 相关文章推荐
如何使用FireFox插件FirePHP调试PHP
Jul 23 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
Nov 28 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
C# WinForm中实现快捷键自定义设置实例
Jan 23 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
php实现数组按指定KEY排序的方法
Mar 30 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
php使用glob函数遍历文件和目录详解
Sep 23 PHP
PHP实现登陆表单提交CSRF及验证码
Jan 24 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 PHP
php+ajax制作无刷新留言板
Oct 27 #PHP
一个完整的php文件上传类实例讲解
Oct 27 #PHP
php邮件发送的两种方式
Apr 28 #PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 #PHP
php+ajax实现无刷新的新闻留言系统
Dec 21 #PHP
PHP测试成功的邮件发送案例
Oct 26 #PHP
php使用APC实现实时上传进度条功能
Oct 26 #PHP
You might like
世界上第一台立体声收音机
2021/03/01 无线电
聊天室php&amp;mysql(二)
2006/10/09 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
php中yii框架实例用法
2020/12/22 PHP
Javascript的一种模块模式
2010/09/08 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
Dojo Javascript 编程规范 规范自己的JavaScript书写
2014/10/26 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
python实现进程间通信简单实例
2014/07/23 Python
python黑魔法之参数传递
2016/02/12 Python
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
pytorch模型存储的2种实现方法
2020/02/14 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
欧洲领先的火车票和大巴票预订平台:Trainline
2018/12/26 全球购物
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
金蝶的一道SQL笔试题
2012/12/18 面试题
自荐信格式技巧有哪些呢
2013/11/19 职场文书
房产协议书范本2014
2014/09/30 职场文书
网球场地租赁协议范本
2014/10/07 职场文书
先进单位申报材料
2014/12/25 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python