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面向对象的使用教程 简单数据库连接
Nov 25 PHP
PHP 设置MySQL连接字符集的方法
Jan 02 PHP
PHP新手用的Insert和Update语句构造类
Mar 31 PHP
深入file_get_contents与curl函数的详解
Jun 25 PHP
国产PHP开发框架myqee新手快速入门教程
Jul 14 PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
Aug 18 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
Apr 04 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
May 27 PHP
Laravel第三方包报class not found的解决方法
Oct 13 PHP
PHP Web表单生成器案例分析
Jun 02 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中http_build_query 的一个问题
2012/03/25 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
创建自己的jquery表格插件
2015/11/25 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
解析Vue 2.5的Diff算法
2017/11/28 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
Python正则表达式匹配ip地址实例
2014/10/09 Python
python函数装饰器用法实例详解
2015/06/04 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
python中函数传参详解
2016/07/03 Python
JSON Web Tokens的实现原理
2017/04/02 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
django 自定义过滤器的实现
2019/02/26 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
夜班门卫岗位职责
2013/12/09 职场文书
行政内勤岗位职责
2014/04/07 职场文书
介绍信如何写
2015/01/31 职场文书
实习生个人总结范文
2015/02/28 职场文书
同意离婚答辩状
2015/05/22 职场文书
生活小常识广播稿
2015/08/19 职场文书
导游词之天津古文化街
2019/11/09 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL