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服务器实现多session并发运行
Oct 09 PHP
用PHP+MySql编写聊天室
Oct 09 PHP
php 各种应用乱码问题的解决方法
May 09 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
php中explode与split的区别介绍
Oct 03 PHP
php生成QRcode实例
Sep 22 PHP
php中使用url传递数组的方法
Feb 11 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 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同时支持GIF、png、JPEG
2006/10/09 PHP
C# Assembly类访问程序集信息
2009/06/13 PHP
PHP简洁函数小结
2011/08/12 PHP
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
vuex + keep-alive实现tab标签页面缓存功能
2019/10/17 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
JS 设计模式之:工厂模式定义与实现方法浅析
2020/05/06 Javascript
使用Python编写一个在Linux下实现截图分享的脚本的教程
2015/04/24 Python
简单上手Python中装饰器的使用
2015/07/12 Python
详解Python中映射类型的内建函数和工厂函数
2015/08/19 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
pytorch 共享参数的示例
2019/08/17 Python
Django--权限Permissions的例子
2019/08/28 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
python怎么自定义捕获错误
2020/06/29 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
美国最流行的男士时尚网站:Touch of Modern
2018/02/05 全球购物
酒店采购员岗位职责
2015/04/03 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang
golang使用map实现去除重复数组
2022/04/14 Golang