今天发现使用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