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 图像处理类1
Jun 15 PHP
php 生成随机验证码图片代码
Feb 08 PHP
PHP原理之异常机制深入分析
Aug 08 PHP
PHP实现对文本数据库的常用操作方法实例演示
Jul 04 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
May 17 PHP
PHP编写daemon process详解及实例代码
Sep 30 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
Oct 23 PHP
PHP hebrev()函数用法讲解
Feb 21 PHP
PHP设计模式之PHP迭代器模式讲解
Mar 22 PHP
laravel框架实现去掉URL中index.php的方法
Oct 12 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 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
介绍几个array库的新函数 php
2006/12/29 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
基于PHP实现用户登录注册功能的详细教程
2020/08/04 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
javascript div 弹出可拖动窗口
2009/02/26 Javascript
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
Jquery常用技巧收集整理篇
2010/11/14 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
七夕情人节丘比特射箭小游戏
2015/08/20 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
Canvas实现放射线动画效果
2017/02/15 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
jQuery is not defined 错误原因与解决方法小结
2017/03/19 Javascript
Vue实现购物车功能
2017/04/27 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
微信小程序实现购物页面左右联动
2019/02/15 Javascript
python实现简易动态时钟
2018/11/19 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python编写单元测试代码实例
2020/09/10 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
CSS中使用grid布局实现一套模板多种布局
2022/07/15 HTML / CSS