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下intval()和(int)转换使用与区别
Jul 18 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
PHP以及MYSQL日期比较方法
Nov 29 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
smarty模板引擎之配置文件数据和保留数据
Mar 30 PHP
php判断linux下程序问题实例
Jul 09 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 PHP
php mysql操作mysql_connect连接数据库实例详解
Dec 26 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
Mar 24 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
May 12 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 PHP
PHP页面静态化――纯静态与伪静态用法详解
Jun 05 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手册及PHP编程标准
2006/12/17 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
初识Node.js
2015/03/20 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
this关键字的含义
2015/04/08 面试题
如何写你的创业计划书
2014/01/07 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
SpringBoot快速入门详解
2021/07/21 Java/Android