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

然后是表单:

[html] view plaincopyprint?

  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文件

[php] view plaincopyprint?

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

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

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

时间: 2024-10-12 07:13:52

PHP通过APC获取上传文件进度的相关文章

Ajax上传文件进度条显示

要实现进度条的显示,就要知道两个参数,上传的大小和总文件的大小 html5提供了一个上传过程事件,在上传过程中不断触发,然后用已上传的大 小/总大小,计算上传的百分比,然后用这个百分比控制div框的显示,就可以 实现上传的进度条效果 前端页面 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Ajax上传文件进度条显示

Atitit.js获取上传文件全路径

1. 默认的value只能获取文件名..安全原因.. 1 2. Firefox浏览器的读取 1 3. Html5 的file api 2 4. 解决方法::使用applet插件 2 5. 参考 3 1. 默认的value只能获取文件名..安全原因.. js是无法获取file 控件的值的,你要获取的话可以通过后台程序语言用json或者xml之类的格式来返回被上传的文件路径. file是一种特殊的input,不能被赋值,也不能被javascript取值,只能随表单提交,而且随表单提交的也是file路

ie下获取上传文件全路径

ie下获取上传文件全路径,3.5之后的火狐是没法获取上传文件全路径的 1 /*获取上传文件路径*/ 2 function getFilePath(obj) { 3 var form = $(this).parents("form"); 4 form.validate(); 5 var fileObj = obj; 6 if (fileObj) { 7 if (window.navigator.userAgent.indexOf("MSIE") >= 1) {

使用HttpRequest.Files 获取上传文件,实现上传附件功能

使用HttpRequest.Files 获取上传文件,实现上传附件功能,不同浏览器会有差异: 获得在 Google 浏览器上传后得到的 HttpRequest.Files  (客户端上载文件的集合) 单个文件查看:对应的FileName 是上传文件的原始文件名:例:开发管理手册2017版.docx 获取IE浏览器上传后HttpRequest.Files: 单个文件查看:对应的FileName 是上传文件 带路径的文件名 例:C:\\Users\\XXX\\Desktop\\开发管理手册2017版

C#获取上传文件的md5

上网搜都是通过FileStream fs=new FileStream();获得文件md5. 看了下md5.ComputeHash()方法中的参数,原来有个Stream类型的,那就很简单了. 1.HttpPostedFileBase file = Request.Files["file"];//获取上传文件      2.string s= GetMD5HashFromFile(file.InputStream);//file.InputStream获取上传文件Stream 3.s便是

php上传文件进度条

ps:本文转自脚本之家 Web应用中常需要提供文件上传的功能.典型的场景包括用户头像上传.相册图片上传等.当需要上传的文件比较大的时候,提供一个显示上传进度的进度条就很有必要了. 在PHP 5.4以前,实现这样的进度条并不容易,主要有三种方法: 1.使用Flash, Java, ActiveX 2.使用PHP的APC扩展 3.使用HTML5的File API 第一种方法依赖第三方的浏览器插件,通用性不足,且易带来安全隐患.不过由于Flash的使用比较广泛,因此还是有很多网站使用Flash作为解决

SpringMVC上传文件进度显示

效果图: FileUploadController.java import java.io.File; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.FileIt

oss上传文件进度条展示

用户上传文件至oss的时候需要增加一个进度条展示,查看了官方文档及网上几篇博客后整理一下相关思路,在此记录一下自己的成长. 在此以上传视频为例,自定义监听监听文件上传进度,通过将字节数和总字节数之间比例写入session中返回给前端进行进度展示. private static String endpoint = "http://oss-cn-beijing.aliyuncs.com";     private static String accessKeyId = "<

asp.net大文件上传与上传文件进度条问题

利用Plupload解决大容量文件上传问题, 带进度条和背景遮罩层 关于Plupload结合上传插件jquery.plupload.queue的使用 这是群里面一位朋友给的资料. 下面是自己搜索到的一些资料: 基于AJAX的文件上传显示进度条实现 思路是通过ajax后台检查目前上传的文件怎么样了,然后更新前台的进度条.