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 相关文章推荐
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
PHP编实现程动态图像的创建代码
Sep 28 PHP
PHP开发的一些注意点总结
Oct 12 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
PHP 使用MySQL管理Session的回调函数详解
Jun 21 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
PHP编程之设置apache虚拟目录
Jul 08 PHP
php微信公众平台示例代码分析(二)
Dec 06 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 PHP
PHP 观察者模式深入理解与应用分析
Sep 25 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
PHP 源代码压缩小工具
2009/12/22 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
详解webpack介绍&amp;安装&amp;常用命令
2017/06/29 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
Python转换HTML到Text纯文本的方法
2015/01/15 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
2020/01/09 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
远程调用的原理
2014/07/05 面试题
商场消防管理制度
2014/01/12 职场文书
师说教学反思
2014/02/07 职场文书
保险专业自荐信范文
2014/02/20 职场文书
毕业生欢送会主持词
2014/03/31 职场文书
星级党支部申报材料
2014/05/31 职场文书
销售岗位职责范本
2014/06/12 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
活动总结范文
2014/08/30 职场文书
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
用电申请报告范文
2015/05/18 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
Nginx配置80端口访问8080及项目名地址方法解析
2021/03/31 Servers
为什么代码规范要求SQL语句不要过多的join
2021/06/23 MySQL
Python字典的基础操作
2021/11/01 Python
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript