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 相关文章推荐
Windows下PHP5和Apache的安装与配置
Sep 05 PHP
一个用于mysql的数据库抽象层函数库
Oct 09 PHP
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
PHP spl_autoload_register实现自动加载研究
Dec 06 PHP
微博短链接算法php版本实现代码
Sep 15 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
Linux下编译redis和phpredis的方法
Apr 07 PHP
Nginx环境下PHP flush失效的解决方法
Oct 19 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
May 09 PHP
php框架知识点的整理和补充
Mar 01 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
如何在PHP中使用数组
2020/06/09 PHP
JS Timing
2007/04/21 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
JQuery遍历DOM节点的方法
2015/06/11 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
2017/09/23 jQuery
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
详解Angular操作cookies方法
2018/06/01 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
2020/04/09 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
python关闭windows进程的方法
2015/04/18 Python
Python脚本处理空格的方法
2016/08/08 Python
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
2018/02/26 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
法学自荐信
2014/06/20 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
2014年财政工作总结
2014/12/10 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
利用Python实现Picgo图床工具
2021/11/23 Python
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python