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 相关文章推荐
让PHP支持页面回退的两种方法
Jan 10 PHP
php MySQL与分页效率
Jun 04 PHP
php xml 入门学习资料
Jan 01 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
Mar 23 PHP
php事务处理实例详解
Jul 11 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
Oct 13 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 PHP
基于thinkPHP类的插入数据库操作功能示例
Jan 06 PHP
POST一个JSON格式的数据给Restful服务实例详解
Apr 07 PHP
PHP利用Socket获取网站的SSL证书与公钥
Jun 18 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
一个php导出oracle库的php代码
2009/04/20 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
php阳历转农历优化版
2016/08/08 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
JS中Object对象的原型概念基础
2018/01/29 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
Python之字典对象的几种创建方法
2020/09/30 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
德国最大的网上鞋店之一:Schuhe24.de
2017/06/10 全球购物
董事长岗位职责
2013/11/30 职场文书
《晏子使楚》教学反思
2014/02/08 职场文书
毕业评语大全
2014/05/04 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
公务员政审材料
2014/12/23 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
Mysql效率优化定位较低sql的两种方式
2021/05/26 MySQL
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript