php使用APC实现实时上传进度条功能


Posted in PHP onOctober 26, 2015

php不具备实时上传进度条功能,如果想有这种功能我们一般会使用ajax来实现,但是php提供了一个apc,它就可以与php配置实现上传进度条功能。
主要针对的是window上的应用。
1.服务器要支持apc扩展,没有此扩展的话,下载一个扩展扩展要求php.5.2以上。
2.配置apc相关配置,重启apache
代码如下

extension=php_apc.dll  
apc.rfc1867 = on  
apc.max_file_size = 1000M  
upload_max_filesize = 1000M  
post_max_size = 1000M   
说明一下:至于参数要配多大,得看项目需要apc.max_file_size,  设置apc所支持上传文件的大小,要求apc.max_file_size<=upload_max_filesize  并且apc.max_file_size <=post_max_size.重新启动apache即可实现apc的支持.
3.在代码里面利用phpinfo();查看apc扩展安装了没有。
4.下面是实现代码:
getprogress.php
代码如下 

<?php 
session_start(); 
if(isset($_GET['progress_key'])) { 
 $status = apc_fetch('upload_'.$_GET['progress_key']); 
 echo ($status['current']/$status['total'])*100; 
} 
?> 
upload.php
PHP Code
<?php 
 $id = $_GET['id']; 
?> 
<form enctype="multipart/form-data" id="upload_form" action="target.php" method="POST"> 
<input type="hidden" name="APC_UPLOAD_PROGRESS" 
 id="progress_key" value="<?php echo $id?>"/> 
<input type="file" id="test_file" name="test_file"/><br/> 
<input onclick="window.parent.startProgress(); return true;" 
 type="submit" value="上传"/> 
</form>

target.php
代码如下

<?php 
set_time_limit(600); 
if($_SERVER['REQUEST_METHOD']=='POST') { 
 move_uploaded_file($_FILES["test_file"]["tmp_name"], 
 dirname($_SERVER['SCRIPT_FILENAME'])."/UploadTemp/" . $_FILES["test_file"]["name"]);//UploadTemp文件夹位于此脚本相同目录下 
 echo "<p>上传成功</p>"; 
} 
?>

index.php
代码如下 

<?php 
 $id = md5(uniqid(rand(), true)); 
?> 
<html> 
<head><title>上传进度</title></head> 
<body> 
<script src="js/jquery-1.4.4.min.js" language="javascript"></script> 
 
 
<script language="javascript"> 
var proNum=0; 
var loop=0; 
var progressResult; 
function sendURL() { 
  $.ajax({ 
   type : 'GET', 
   url : "getprogress.php?progress_key=<?php echo $id;?>", 
   async : true, 
   cache : false, 
   dataType : 'json', 
   data: "progress_key=<?php echo $id;?>", 
   success : function(e) { 
     progressResult = e; 
     proNum=parseInt(progressResult); 
     document.getElementById("progressinner").style.width = proNum+"%"; 
     document.getElementById("showNum").innerHTML = proNum+"%"; 
     if ( proNum < 100){ 
     setTimeout("getProgress()", 100); 
     } 
     
   } 
  }); 
 
} 
 
function getProgress(){ 
 loop++; 
 
 sendURL(); 
} 
var interval; 
function startProgress(){ 
 document.getElementById("progressouter").style.display="block"; 
 setTimeout("getProgress()", 100); 
} 
</script> 
<iframe id="theframe" name="theframe" 
 src="upload.php?id=<?php echo $id; ?>" 
 style="border: none; height: 100px; width: 400px;" > 
</iframe> 
<br/><br/> 
<div id="progressouter" style="width: 500px; height: 20px; border: 6px solid red; display:none;"> 
 <div id="progressinner" style="position: relative; height: 20px; background-color: purple; width: 0%; "></div> 
</div> 
<div id='showNum'></div><br> 
<div id='showNum2'></div> 
</body> 
</html>

以上就是跟大家分享的php使用APC实现实时上传进度条功能的方法,希望对大家的学习有所帮助。

PHP 相关文章推荐
PHP求最大子序列和的算法实现
Jun 24 PHP
PHP explode()函数用法、切分字符串
Oct 03 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
PHP CodeIgniter框架的工作原理研究
Mar 30 PHP
PHP加密解密字符串汇总
Apr 26 PHP
php类自动加载器实现方法
Jul 28 PHP
PHP请求Socket接口测试实例
Aug 12 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
php封装单文件上传到数据库(路径)
Oct 15 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
May 23 PHP
Laravel框架使用Seeder实现自动填充数据功能
Jun 13 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 PHP
php需登录的文件上传管理系统
Mar 21 #PHP
PHP文件缓存类实现代码
Oct 26 #PHP
php多线程实现方法及用法实例详解
Oct 26 #PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
Oct 26 #PHP
PHP和C#可共用的可逆加密算法详解
Oct 26 #PHP
日常整理PHP中简单的图形处理(经典)
Oct 26 #PHP
php 参数过滤、数据过滤详解
Oct 26 #PHP
You might like
海贼王:最美的悬赏令!
2020/03/02 日漫
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
php中调用其他系统http接口的方法说明
2014/02/28 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
浅谈php://filter的妙用
2019/03/05 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
2019/09/17 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
Python中的面向对象编程详解(上)
2015/04/13 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
Python中dict和set的用法讲解
2019/03/28 Python
python中正则表达式与模式匹配
2019/05/07 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
python中upper是做什么用的
2020/07/20 Python
如何用SQL语句进行模糊查找
2015/09/25 面试题
实习期自我鉴定
2013/10/11 职场文书
家长给孩子的评语
2014/01/30 职场文书
新员工入职感言
2014/02/01 职场文书
毕业自我评价
2014/02/05 职场文书
房地产开盘策划方案
2014/02/10 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
精神病医院见习报告
2014/11/03 职场文书
白银帝国观后感
2015/06/17 职场文书
Python进行区间取值案例讲解
2021/08/02 Python