当前位置:首页 > PHP教程 > php上传下载 > 列表

php使用APC实现实时上传进度条功能

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-21 21:05:47 浏览: 评论:0 

这篇文章主要介绍了php使用APC实现实时上传进度条功能,php本身不具备可以带有实时上传进度条功能,但是php提供了一个apc,它可以与php配置实现上传进度条,感兴趣的小伙伴们可以参考一下。

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

  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. ?>  
  8. upload.php 
  9. PHP Code 
  10. <?php  
  11.  $id = $_GET['id'];  
  12. ?>  
  13. <form enctype="multipart/form-data" id="upload_form" action="target.php" method="POST">  
  14. <input type="hidden" name="APC_UPLOAD_PROGRESS" 
  15.  id="progress_key" value="<?php echo $id?>"/>  
  16. <input type="file" id="test_file" name="test_file"/><br/>  
  17. <input onclick="window.parent.startProgress(); return true;" 
  18.  type="submit" value="上传"/>  
  19. </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>  
  55. <div id='showNum'></div><br>  
  56. <div id='showNum2'></div>  
  57. </body>  
  58. </html> 

以上就是跟大家分享的php使用APC实现实时上传进度条功能的方法,希望对大家的学习有所帮助。

Tags: APC上传进度条

分享到: