今天發現使用PHP的APC也能獲取上傳文件的進度。這篇文章就說下如何作。php
首先安裝APC的方法和其餘PHP模塊的方法沒什麼兩樣,網上能找出好多html
phpinfo能夠看到APC的默認配置有:nginx
看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
apc.rfc1867=onorm
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 訪問
getprocess.php <?php print_r(apc_fetch("upload_6226f7cbe59e99a90b5cef6f94f966fd"));
確保能經過網絡訪問到頁面
這裏能夠經過http://10.16.15.118:7702/getprocess.php 訪問到
<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
按照這篇文章說的: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模式。
能夠看到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