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的日期与时间函数技巧
Apr 24 PHP
开源SNS系统-ThinkSNS
May 18 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
解析用PHP实现var_export的详细介绍
Jun 20 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
php操作redis缓存方法分享
Jun 03 PHP
一个简单的php路由类
May 29 PHP
比较完整的微信开发php代码
Aug 02 PHP
Yii框架的布局文件实例分析
Sep 04 PHP
php 实现银联商务H5支付的示例代码
Oct 12 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 18 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算开始时间到过期时间的相隔的天数
2011/01/12 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
php中给js数组赋值方法
2014/03/10 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
jQuery拖动布局其结果保存到数据库
2015/10/09 Javascript
Bootstrap导航栏各元素操作方法(表单、按钮、文本)
2015/12/28 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
vue编译打包本地查看index文件的方法
2018/02/23 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
浅谈微信JS-SDK 微信分享接口开发(介绍版)
2018/08/15 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
详解 Python 读写XML文件的实例
2017/08/02 Python
wxpython实现图书管理系统
2018/03/12 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
python实现批量文件重命名
2019/10/31 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
python time.strptime格式化实例详解
2021/02/03 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
毕业生找工作的求职信范文
2013/12/24 职场文书
入党自我评价范文
2014/02/02 职场文书
市场部经理岗位职责
2014/04/10 职场文书
作风年建设汇报材料
2014/08/14 职场文书
2016新年年会主持词
2015/07/06 职场文书
餐馆开业致辞
2015/08/01 职场文书
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL