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 相关文章推荐
15个小时----从修改程序到自己些程序
Oct 09 PHP
使用adodb lite解决问题
Dec 31 PHP
php Memcache 中实现消息队列
Nov 24 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
Oct 23 PHP
destoon后台网站设置变成空白的解决方法
Jun 21 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 PHP
浅谈php错误提示及查错方法
Jul 14 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
Oct 22 PHP
CodeIgniter控制器之业务逻辑实例分析
Jan 20 PHP
php文件上传、下载和删除示例
Aug 28 PHP
ThinkPHP实现的rsa非对称加密类示例
May 29 PHP
Laravel使用原生sql语句并调用的方法
Oct 09 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
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
常用PHP框架功能对照表
2014/10/23 PHP
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
jquery中用函数来设置css样式
2016/12/22 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
微信小程序基于picker实现级联菜单
2019/02/15 Javascript
图解javascript作用域链
2019/05/27 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
原生javascript如何实现共享onload事件
2020/07/03 Javascript
[03:59]第二届DOTA2亚洲邀请赛选手传记-VGJ.rOtk
2017/04/03 DOTA
python使用pymysql实现操作mysql
2016/09/13 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
python查询文件夹下excel的sheet名代码实例
2019/04/02 Python
python实现远程控制电脑
2019/05/23 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
泰国演唱会订票网站:StubHub泰国
2018/02/26 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
财经学院自荐信范文
2014/02/02 职场文书
委托公证书范本
2014/04/03 职场文书
2014年底工作总结
2014/12/15 职场文书
2015年财务部工作总结
2015/04/10 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
Memcached介绍及php-memcache扩展安装
2021/04/01 PHP
springboot临时文件存储目录配置方式
2021/07/01 Java/Android