HTML文件拿不到process,PHP使用APC获取上传文件进度 – 轩脉刃

今天发现使用PHP的APC也能获取上传文件的进度。这篇文章就说下如何做。

安装APC

首先安装APC的方法和其他PHP模块的方法没什么两样,网上能找出好多

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

dfb0cb69f0f7b281be18d870eafa3800.png

apc.rfc1867

看apc.rfc1867这个配置项:

文档说的是如果你上传文件的时候,在POST中带有APC_UPLOAD_PROGRESS字段,那么APC会自动以这个值创造一个upload_key缓存

这个时候,用户可以使用ajax再过来调用,就可以获取到当前文件上传的状态了

这个状态包括:

文件大小

当前已上传文件大小

文件上传速度(上传结束后才有)

实验:

1 开启rfc1867配置项

apc.rfc1867=on

2 确认,phpinfo()中可以看到已经打开

430103fb5527cc5598463e3aab403d19.png

3 服务端上传php代码

apc.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’;

}

}

确保能通过网络访问到页面

4 服务端查看进度php代码

getprocess.php

print_r(apc_fetch("upload_6226f7cbe59e99a90b5cef6f94f966fd"));

确保能通过网络访问到页面

5 写个简单的客户端html

这里要注意的是,APC_UPLOAD_PROCESS 必须要放在上传的file之前(这也是文档中有写到的),否则会出现warning,并且也无法得到process

6 上传文件访问apc.php

51ad9a50c1b0cfb1b3f6d5bbad67cf3c.png

7 查看getprocess.php

aca4a1a8ba0a3d0540eb0b5e32e47093.png

下面的疑问就是是不是真有中间过渡状态呢?

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

826c51da539265930df016a69f04e317.png

可以看到current的进度,而且可以看到没有上传完成的时候,rate字段是没有的~~~so good~~

参考文章:

4efa0390a15415ba49556934d51b3783.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值