在PHP5.4版本当中给我们提供了好用的特性,上传进度的支持,我们可以配合Ajax动态获取SESSION当中的上传进度:

在使用这一特性之前,需要现在php.ini文件当中进行相应的设置:

 
1
2
3
4
5
6
session.upload_progress.enabled[ = On] :                         是否启用上传进度报告(默认开启)
session.upload_progress.cleanup[ = Off] :                        是否在上传完成后及时删除进度数据(默认开启, 推荐开启).
session.upload_progress.prefix[ = upload_progress_ ] :           进度数据将存储在$_SESSION[session.upload_progress.prefix . $_POST[session.upload_progress.name]]
session.upload_progress.name[ = PHP_SESSION_UPLOAD_PROGRESS ] :  如果_POST[session.upload_progress.name]没有被设置, 则不会报告进度.
session.upload_progress.freq[ = 1% ] :                           更新进度的频率(已经处理的字节数), 也支持百分比表示’%’.
session.upload_progress.min_freq[ = 1.0] :                       更新进度的时间间隔(秒级)

需要注意的是,session.upload_progress.cleanup的值我们修改为off,否则文件上传完毕,session会把上传报告删除,以节省服务器资源,这样不便于我们做实验。

接下来,我们只需要做的就是完成form表单的书写:

upload.php

 
1
2
3
4
5
<form action="doupload.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="<?php echo ini_get(session.upload_progress.name) ?>" value="jiege" />
    请选择文件:<input type="file" name="pic" /><br />
    <input type="submit" value="上传" />
</form>

这里的表单,必须提供一个session.upload_progress.name对应的值,否则将无法使用文件上传报告。

开启后,我们即可在doupload.php中,通过SESSION接收文件上传进度:

doupload.php

 
1
2
3
4
5
<?php
    session_start();
    echo "<pre>";
    var_dump($_SESSION);
    echo "</pre>";

输出结果:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
array(1) {
  ["upload_progress_jiege"]=>
  array(5) {
    ["start_time"]=>
    int(1407314201)
    ["content_length"]=>
    int(653829)
    ["bytes_processed"]=>
    int(653829)
    ["done"]=>
    bool(true)
    ["files"]=>
    array(1) {
      [0]=>
      array(7) {
        ["field_name"]=>
        string(3) "pic"
        ["name"]=>
        string(15) "1-140HP95Z0.rar"
        ["tmp_name"]=>
        string(27) "C:\Windows\Temp\phpD9C3.tmp"
        ["error"]=>
        int(0)
        ["done"]=>
        bool(true)
        ["start_time"]=>
        int(1407314201)
        ["bytes_processed"]=>
        int(653508)
      }
    }
  }
}

我们可以看到,session的上传报告的下标为upload_progress_jiege,该名称的组成即为php.ini文件当中的session.upload_progress.prefix的值与表单隐藏域的值的组成,因此,大家需要注意,表单当中的这个隐藏域一定要定义,否则无法获取上传报告。

报告当中包含的值分别代表:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
array(1) {
  ["upload_progress_jiege"]=>
  array(5) {
    ["start_time"]=>            //请求时间
    int(1407314201)
    ["content_length"]=>        //上传的所有文件的总大小
    int(653829)
    ["bytes_processed"]=>       //上传已完成的大小
    int(653829)
    ["done"]=>                  //是否已经处理完毕
    bool(true)
    ["files"]=>                 //所有文件
    array(1) {
      [0]=>
      array(7) {
        ["field_name"]=>                               //表单名称
        string(3) "pic"
        ["name"]=>
        string(15) "1-140HP95Z0.rar"                   //原文件名称
        ["tmp_name"]=>
        string(27) "C:\Windows\Temp\phpD9C3.tmp"       //上传的临时文件名称
        ["error"]=>                                    //上传产生的错误
        int(0)
        ["done"]=>                                     //该文件是否已经处理完毕
        bool(true)
        ["start_time"]=>                               //请求时间
        int(1407314201)
        ["bytes_processed"]=>                          //已经处理的文件大小
        int(653508)
      }
    }
  }
}

接下来,大家就可以使用Ajax技术将产生的上传报告异步加载即可。

PHP5.4新特性之上传进度支持Upload progress的更多相关文章

  1. PHP上传进度支持(Upload progress in sessions)

    文件上传进度反馈, 这个需求在当前是越来越普遍, 比如大附件邮件. 在PHP5.4以前, 我们可以通过APC提供的功能来实现. 或者使用PECL扩展uploadprogress来实现. 从PHP的角度 ...

  2. PHP5.3, PHP5.4, PHP5.5新特性

    PHP 5.3中的新特性 1. 支持命名空间 (Namespace) 2. 支持延迟静态绑定(Late Static Binding) 3. 支持goto语句 4. 支持闭包.Lambda/Anony ...

  3. php5.3 PHP5.4 PHP5.5 新特性/使用PHP5.5要注意的

      1.PHP 5.3中的新特性 1.1 PHP 5.3中的新特性 1.1.1. 支持命名空间 (Namespace) 毫无疑问,命名空间是PHP5.3所带来的最重要的新特性. 在PHP5.3中,则只 ...

  4. PHP5.4新特性

    PHP5.4 此次更新的关键新特性,包括:新增traits,更精简的Array数组语法,供测试使用的内建webserver,可以闭包使用的$this指针,实例化类成员访问, PHP 5.4.0 性能大 ...

  5. php5.4新特性实践

    本机安装的是wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24-32b.exe集成包 自带了php5.4 1. 数组写法 定义一个数组 过去: $arr = ...

  6. PHP5.4新特性(转)

    PHP5.4正式前两天发布了,之前有看了一些PHP5.4主要特性相关文章,因此在这里小结一下. 其中好几点更新是由Laruence贡献的!本文部分内容也是源自Laruence的博客. 1. Buid- ...

  7. php5.3新特性 之 mysql native driver(mysqlnd)

    概述 本文主要写给sa看的.码农就不用看了. mysql native driver(mysqlnd) 自从php5.3.0开始成为官方源代码的一部分, 用来取代传统的mysql client lib ...

  8. PHP5.3新特性

    1.首先对之前滥用的语法进行了规范 众所周知PHP在语言开发过程中有一个很好的容错性,导致在数组或全局变量中包含字符串不使用引号是可以不报错的,很多业余的开发者因为懒惰而产生的安全问题十分严重,之所以 ...

  9. Php5.5新特性 Generators详解

    在PHP5.5.0版本中,新增了生成器(Generators)特性,用于简化实现迭代器接口(Iterator)创建简单的迭代器的复杂性. 通过生成器,我们可以轻松的使用foreach迭代一系列的数据, ...

随机推荐

  1. 算法笔记_188:历届试题 危险系数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点 ...

  2. [Python]网络爬虫(八):糗事百科的网络爬虫(v0.2)源码及解析

    转自:http://blog.csdn.net/pleasecallmewhy/article/details/8932310 项目内容: 用Python写的糗事百科的网络爬虫. 使用方法: 新建一个 ...

  3. 【FAI】七日年化收益与万份收益的理解

    七日年化收益:其实指的一年的收益(应该忽略”七日”),这里的七日指的是取最近七日年化的结果 万份收益:每万元每天的收益 可以使用下图来清晰识别: 例子: 10000元按照5%的七日年化收益计算的话: ...

  4. [原创]-[WEB]代码高亮工具

    代码高亮显示,不是什么新鲜玩艺了,各种各样的插件多了去了.       一开始想在baidu空间里贴代码,用GeSHi生成的高亮HTML复制到编辑器就可以了,不过QQ空间却不行,复制过去的格式全部被清 ...

  5. 照片管家iOS-实现本地相册、视频、安全保护、社交分享源码下载Demo

    <照片管家> APP功能: 1.本地照片批量导入与编辑 2.本地视频存储与播放 3.手势密码.数字密码.TouchID安全保护 4.QQ.微信.微博.空间社交分享 5.其他细节功能. 运用 ...

  6. RCF库ClientStub.setAutoReconnect

    这个选项为false时,当连接断开时,第一次调用服务会抛出异常,而第二次调用时,也会自动连接.

  7. Foundations of Machine Learning: The PAC Learning Framework(2)

    Foundations of Machine Learning: The PAC Learning Framework(2) (一)假设集有限在一致性下的学习界. 在上一篇文章中我们介绍了PAC-le ...

  8. 在Windows Service上安装运行Redis

    CSDN下载RedisWatcher,运行InstallWatcher.msi,默认安装在C:\Program Files (x86)\RedisWatcher,修改watcher.conf # re ...

  9. ios 利用UIScrollView实现图片缩放

    前言:我们希望做出的效果是,实现图片的分页滑动,且每张图片都可以双击或用手指捏合来缩放大小.上一篇讲解UIGestureRecognizer的中,我们介绍的UIPinchGestureRecogniz ...

  10. Sourcetree 更新git账号密码

    删除Sourcetree 缓存文件(只需要删密码文件),文件位置: Mac: ~/Library/Application Support/SourceTree Windows: C:\Users\US ...