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


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

安裝APC

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

phpinfo可以看到APC的默認配置有:

Image

apc.rfc1867

看apc.rfc1867這個配置項:

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

 

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

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

這個狀態包括:

文件大小

當前已上傳文件大小

文件上傳速度(上傳結束后才有)

實驗:

1 開啟rfc1867配置項

apc.rfc1867=on

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';
   }
}

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

這里可以通過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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM