当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP利用apc实现上传进度条方法

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-28 10:01:28 浏览: 评论:0 

php本身是不具备可以带有实时上传进度条功能了,如果想有这种功能我们一般会使用ajax来实现,但是php提供了一个apc,他就可以与php配置实现上传进度条.

主要针对的是window上的应用.

1.服务器要支持apc扩展,没有此扩展的话,百度一下php_apc.dll,下载一个扩展扩展要求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,代码如下:

  1. <?php    
  2. session_start();    
  3. if(isset($_GET['progress_key'])) {    
  4.   $status = apc_fetch('upload_'.$_GET['progress_key']);    
  5.   echo ($status['current']/$status['total'])*100;    
  6. }    
  7. ?> 

upload.php,PHP Code:

  1. <?php    
  2.    $id = $_GET['id'];    
  3. ?>    
  4. <form enctype="multipart/form-data" id="upload_form" action="target.php" method="POST">    
  5. <input type="hidden" name="APC_UPLOAD_PROGRESS"     
  6.        id="progress_key"  value="<?php echo $id?>"/>    
  7. <input type="file" id="test_file" name="test_file"/><br/>    
  8. <input onclick="window.parent.startProgress(); return true;"    
  9.  type="submit" value="上传"/>    
  10. </form> 

target.php,代码如下:

  1. <?php      
  2. set_time_limit(600);    
  3. if($_SERVER['REQUEST_METHOD']=='POST') {    
  4.   move_uploaded_file($_FILES["test_file"]["tmp_name"],     
  5.   dirname($_SERVER['SCRIPT_FILENAME'])."/UploadTemp/" . $_FILES["test_file"]["name"]);//UploadTemp文件夹位于此脚本相同目录下    
  6.   echo "<p>上传成功</p>";    
  7. }    
  8. ?> 

index.php,代码如下:

  1. <?php    
  2.    $id = md5(uniqid(rand(), true));    
  3. ?>    
  4. <html>    
  5. <head><title>上传进度</title></head>    
  6. <body>    
  7. <script src="js/jquery-1.4.4.min.js" language="javascript"></script>    
  8.     
  9.     
  10. <script language="javascript">    
  11. var proNum=0;    
  12. var loop=0;    
  13. var progressResult;    
  14. function sendURL() {    
  15.             $.ajax({    
  16.                         type : 'GET',    
  17.                         url : "getprogress.php?progress_key=<?php echo $id;?>",    
  18.                         async : true,    
  19.                         cache : false,    
  20.                         dataType : 'json',    
  21.                         data: "progress_key=<?php echo $id;?>",    
  22.                         success : function(e) {    
  23.                                      progressResult = e;    
  24.                                       proNum=parseInt(progressResult);    
  25.                                       document.getElementById("progressinner").style.width = proNum+"%";    
  26.                                       document.getElementById("showNum").innerHTML = proNum+"%";    
  27.                                       if ( proNum < 100){    
  28.                                         setTimeout("getProgress()", 100);    
  29.                                       }     
  30.                                      
  31.                         }    
  32.             });    
  33.       
  34. }    
  35.     
  36. function getProgress(){    
  37.  loop++;    
  38.     
  39.  sendURL();    
  40. }    
  41. var interval;    
  42. function startProgress(){    
  43.     document.getElementById("progressouter").style.display="block";    
  44.    setTimeout("getProgress()", 100);    
  45. }    
  46. </script>    
  47. <iframe id="theframe" name="theframe"     
  48.         src="upload.php?id=<?php echo $id; ?>"     
  49.         style="border: none; height: 100px; width: 400px;" >     
  50. </iframe>    
  51. <br/><br/>    
  52. <div id="progressouter" style="width: 500px; height: 20px; border: 6px solid red; display:none;">    
  53.    <div id="progressinner" style="position: relative; height: 20px; background-color: purple; width: 0%; "></div>    
  54. </div>//开源代码phpfensi.com 
  55. <div id='showNum'></div><br>    
  56. <div id='showNum2'></div>    
  57. </body>    
  58. </html>

Tags: PHP进度 apc上传进度条

分享到: