PHP配合apc實現上傳進度條

來源:互聯網
上載者:User

 

PHP配合apc實現上傳進度條, 一直以為PHP是無法做到進度條一個動態功能,原來還是自己的知識面不夠,看到了apc擴充相關的一些文章,利用apc擴充達到了動態實現效果。根據找到相關的文章自己並在此基礎上做了一些小修改。自己的伺服器用的window,在這裡主要針對的是window上的應用。
1.伺服器要支援apc擴充,沒有此擴充的話,百度一下php_apc.dll ,下載一個擴充擴充要求php.5.2以上。
2.配置apc相關配置,重啟apache

PHP Code
  1. extension=php_apc.dll  
  2. apc.rfc1867 = on  
  3. apc.max_file_size = 1000M  
  4. upload_max_filesize = 1000M  
  5. 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 Code
  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

PHP Code
  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

PHP Code
  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>  


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.