PHP通过APC获取上传文件进度

业务需求要做到获取上传POST文件的进度,通常情况下PHP脚本要在POST上传文件完成之后再执行,所以在脚本内是没办法直接取得上传速度,不能像取得执行时间那样在<?php开头加个时间然后结束的时候再加时间相减。

首先想到的方法是通过ajax,在上传之前先给发个请求到服务器记录一下当前时间,然后再post文件。
当然这个不是解决方案,只能知道文件上传开始的大约时间,和结束时间,进度是不知道的。

在网上查了一下:

http://www.cnblogs.com/yjf512/p/3173457.html
http://www.laruence.com/2011/10/10/2217.html

有两种方法,一个是5.2以上的APC,一个是PHP5.4的session机制。因为SESSION机制要求5.4,所以还是选择APC吧,APC准备是集成到PHP里面了,这个东西太好用了!

PHP手册说明:http://cn2.php.net/manual/en/apc.configuration.php#ini.apc.rfc1867

APC首先要确定配置
apc.rfc1867=on

然后是表单:

 

  1. <form enctype="multipart/form-data" action="up4.php" method="POST">  
  2.     <input type="hidden" name="APC_UPLOAD_PROGRESS" value="abc"/>  
  3.     Send this file: <input name="userfile" type="file" />  
  4.     <input type="submit" value="Send File" />  
  5. </form>  


表单注意APC_UPLOAD_PROGRESS的隐藏域一定要在file域之前
然后是查询进度的PHP文件

 

 

  1. <?php  
  2. print_r(apc_fetch("upload_abc"));  

 

这样边上传的时候,边执行这个查询文件就可以看到上传进度了。

PS:补充一下,通常情况下该技巧只能是查询上传进度,作用不大。不过当乱序上传分片文件的情况下,PHP端要知道正在上传的分片(才方便告诉客户端下一片是什么),那么就显得比较有意义了。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。