PHP使用APC獲取上傳文件進度

今天發現使用PHP的APC也能獲取上傳文件的進度。這篇文章就說下如何作。php

安裝APC

首先安裝APC的方法和其餘PHP模塊的方法沒什麼兩樣,網上能找出好多html

phpinfo能夠看到APC的默認配置有:nginx

Image

apc.rfc1867

看apc.rfc1867這個配置項:ajax

http://cn2.php.net/manual/en/apc.configuration.php#ini.apc.rfc1867緩存

 

文檔說的是若是你上傳文件的時候,在POST中帶有APC_UPLOAD_PROGRESS字段,那麼APC會自動以這個值創造一個upload_key緩存網絡

這個時候,用戶能夠使用ajax再過來調用,就能夠獲取到當前文件上傳的狀態了fetch

這個狀態包括:.net

文件大小

當前已上傳文件大小

文件上傳速度(上傳結束後纔有)

實驗:

1 開啓rfc1867配置項

apc.rfc1867=onorm

2 確認,phpinfo()中能夠看到已經打開


Image(1)

3 服務端上傳php代碼

apc.php

<?php
if($_FILES['file']['error'] == UPLOAD_ERR_OK){
   $path = '/tmp/upload/';
   $path .= basename($_FILES['file']['name']);
   if(move_uploaded_file($_FILES['file']['tmp_name'], $path)){
      // upload successful
        echo 'sucess';
   }
}

確保能經過網絡訪問到頁面htm

這裏能夠經過http://10.16.15.118:7702/apc.php 訪問

4 服務端查看進度php代碼

getprocess.php

<?php
print_r(apc_fetch("upload_6226f7cbe59e99a90b5cef6f94f966fd"));

確保能經過網絡訪問到頁面

這裏能夠經過http://10.16.15.118:7702/getprocess.php 訪問到

5 寫個簡單的客戶端html

<html>
<body>
<form enctype="multipart/form-data" method="POST" action="http://10.16.15.118:7702/apc.php">
<input type="hidden" name="APC_UPLOAD_PROGRESS" value="6226f7cbe59e99a90b5cef6f94f966fd"/>
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>

這裏要注意的是,APC_UPLOAD_PROCESS 必需要放在上傳的file以前(這也是文檔中有寫到的),不然會出現warning,而且也沒法獲得process

6 上傳文件訪問apc.php

Image(2)

7 查看getprocess.php

Image(3)

下面的疑問就是是否是真有中間過渡狀態呢?

1 找個大文件,(20M+)

2 確認下nginx+php對文件大小限制超過20M

3 開啓fidder作限速:

按照這篇文章說的:http://donchevp.blogspot.com/2009/11/limiting-your-internet-connection-speed.html

設置rule - customer - 設置這一段代碼

       if (m_SimulateModem) {
            // Delay sends by 300ms per KB uploaded.
            oSession["request-trickle-delay"] = "1"; 
            // Delay receives by 150ms per KB downloaded.
            oSession["response-trickle-delay"] = "150"; 
        }

修改這個request-trickle-delay

而後開啓Simulate模式。

4 a.html頁面上傳這個20M文件

5 不斷刷新getprocess.php

Image(4)

能夠看到current的進度,並且能夠看到沒有上傳完成的時候,rate字段是沒有的~~~so good~~

參考文章:

http://www.phppan.com/2012/04/php-upload-progress/

http://donchevp.blogspot.com/2009/11/limiting-your-internet-connection-speed.html

相關文章
相關標籤/搜索