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学习笔记 数组的常用函数
Jun 13 PHP
php中判断文件空目录是否有读写权限的函数代码
Aug 07 PHP
Yii调试SQL的常用方法
Jul 09 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
php操作MongoDB类实例
Jun 17 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
Nov 05 PHP
如何使用PHP给图片加水印
Oct 12 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
PHP fopen函数用法实例讲解
Feb 15 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 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中目录,文件操作详谈
2007/03/19 PHP
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
深入分析php之面向对象
2013/05/15 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
php输出1000以内质数(素数)示例
2014/02/16 PHP
PHP中soap的用法实例
2014/10/24 PHP
php显示时间常用方法小结
2015/06/05 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
2019/03/06 PHP
YUI模块开发原理详解
2013/11/18 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
解析Python中的__getitem__专有方法
2016/06/27 Python
详解关于Django中ORM数据库迁移的配置
2018/10/08 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
综治工作汇报材料
2014/10/27 职场文书
小学教育见习报告
2014/10/31 职场文书
2015年党性分析材料
2014/12/19 职场文书
开业典礼致辞
2015/07/29 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS