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和AJAX创建RSS聚合器的代码
Mar 13 PHP
php学习笔记之 函数声明
Jun 09 PHP
php+ajax导入大数据时产生的问题处理
Jun 11 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 PHP
PHP快速排序quicksort实例详解
Sep 28 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
php 将json格式数据转换成数组的方法
Aug 21 PHP
PHP Include文件实例讲解
Feb 15 PHP
laravel实现简单用户权限的示例代码
May 28 PHP
php生成短网址/短链接原理和用法实例分析
May 29 PHP
详解PHP中的8个魔术常量
Jul 06 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 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 SQLite类
2009/05/07 PHP
PHP 冒泡排序算法的实现代码
2010/08/08 PHP
php日历制作代码分享
2014/01/20 PHP
PHP微信开发用Cache 解决数据缓存
2016/07/11 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
Node.js的特点详解
2017/02/03 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
Javascript数组及类数组相关原理详解
2020/10/29 Javascript
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
浅谈机器学习需要的了解的十大算法
2017/12/15 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
python xpath获取页面注释的方法
2019/01/14 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
Numpy之reshape()使用详解
2019/12/26 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
python中xlutils库用法浅析
2020/12/29 Python
HTML5的革新 结构之美
2011/06/20 HTML / CSS
荷兰家电销售网站:Welhof
2020/12/08 全球购物
成人毕业生自我鉴定
2013/10/18 职场文书
党建示范点实施方案
2014/03/12 职场文书
经典广告词大全
2014/03/14 职场文书
公司晚会主持词
2014/03/22 职场文书
小学生常见病防治方案
2014/06/06 职场文书
文员岗位职责范本
2015/04/16 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
HTTP中的Content-type详解
2022/01/18 HTML / CSS