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 相关文章推荐
PHP4之COOKIE支持详解
Oct 09 PHP
php中通过smtp发邮件的类,测试通过
Jan 22 PHP
php设计模式 FlyWeight (享元模式)
Jun 26 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
Jul 08 PHP
PHP生成树的方法
Jul 28 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
Yii2创建控制器(createController)方法详解
Jul 23 PHP
php及codeigniter使用session-cookie的方法(详解)
Apr 06 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
php用wangeditor3实现图片上传功能
Aug 22 PHP
浅谈laravel数据库查询返回的数据形式
Oct 21 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 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中static静态变量的使用方法详解
2010/06/04 PHP
浅析PHP的ASCII码转换类
2013/07/05 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
yii的CURD操作实例详解
2014/12/04 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
javascript 模拟坦克大战游戏(html5版)附源码下载
2014/04/08 Javascript
javascipt:filter过滤介绍及使用
2014/09/10 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
Vue项目中跨域问题解决方案
2018/06/05 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
解决Vue项目中tff报错的问题
2020/10/21 Javascript
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
Python实时获取cmd的输出
2015/12/13 Python
python去掉行尾的换行符方法
2017/01/04 Python
浅谈python迭代器
2017/11/08 Python
详解python的super()的作用和原理
2020/10/29 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
Ruby如何实现动态方法调用
2012/11/18 面试题
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
安全宣传标语
2014/06/10 职场文书
大四毕业生自荐书
2014/07/05 职场文书
四年级学生期末评语
2014/12/26 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书