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代码
Dec 06 PHP
php实现的MySQL通用查询程序
Mar 11 PHP
用PHP实现的四则运算表达式计算实现代码
Aug 02 PHP
PHP定时执行计划任务的多种方法小结
Dec 19 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
PHP实现服务器状态监控的方法
Dec 09 PHP
PHP foreach遍历多维数组实现方式
Nov 16 PHP
利用Laravel生成Gravatar头像地址的优雅方法
Dec 30 PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 PHP
PHP+redis实现的购物车单例类示例
Feb 02 PHP
微信公众平台开发教程②微信端分享功能图文详解
Apr 10 PHP
PHP实现统计代码行数小工具
Sep 19 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
php时间不正确的解决方法
2008/04/09 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
CodeIgniter自定义控制器MY_Controller用法分析
2016/01/20 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
Dojo 学习要点
2010/09/03 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
微信小程序实现发送验证码按钮效果
2018/12/20 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python入门之modf()方法的使用
2015/05/15 Python
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
python查看微信好友是否删除自己
2016/12/19 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
2019/01/30 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
判断单链表中是否存在环
2012/07/16 面试题
大学军训感言
2014/01/10 职场文书
结对共建工作方案
2014/06/02 职场文书
社区服务活动小结
2014/07/08 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
详解redis分布式锁的这些坑
2021/05/19 Redis
总结Python常用的魔法方法
2021/05/25 Python
Java实现给Word文件添加文字水印
2022/02/15 Java/Android
SpringBoot 集成短信和邮件 以阿里云短信服务为例
2022/04/22 Java/Android