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应用程序来获取Web服务器的状态信息
Oct 09 PHP
一个MYSQL操作类
Nov 16 PHP
实用函数4
Nov 08 PHP
浅谈php自定义错误日志
Feb 13 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
基于CakePHP实现的简单博客系统实例
Jun 28 PHP
php面向对象与面向过程两种方法给图片添加文字水印
Aug 26 PHP
PHP使用curl模拟post上传及接收文件的方法
Mar 04 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
May 02 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
Oct 15 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 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
zf框架的数据库追踪器使用示例
2014/03/13 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
php中mkdir()函数的权限问题分析
2016/09/24 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
PHP new static 和 new self详解
2017/02/19 PHP
Javascript注入技巧
2007/06/22 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
基于jQuery实现的美观星级评论打分组件代码
2015/10/30 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
解析Vue.js中的组件
2018/02/02 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
深入学习TypeScript 、React、 Redux和Ant-Design的最佳实践
2019/06/17 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
python中的字典使用分享
2016/07/31 Python
python中时间模块的基本使用教程
2019/05/14 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
python图形开发GUI库wxpython使用方法详解
2020/02/14 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
一套软件开发工程师笔试题
2015/05/18 面试题
高中毕业自我鉴定
2013/12/19 职场文书
竞争上岗演讲稿
2014/01/05 职场文书
旅游个人求职信范文
2014/01/30 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
2015年党员自我剖析材料
2014/12/17 职场文书
2015初中团委工作总结
2015/07/28 职场文书
SpringDataJPA在Entity中常用的注解介绍
2021/12/06 Java/Android
Nginx 常用配置
2022/05/15 Servers