PHP5.4新特性之上传进度支持Upload progress

在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技术将产生的上传报告异步加载即可。

时间: 2024-10-10 07:58:29

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

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

文件上传进度反馈, 这个需求在当前是越来越普遍, 比如大附件邮件. 在PHP5.4以前, 我们可以通过APC提供的功能来实现. 或者使用PECL扩展uploadprogress来实现. 从PHP的角度来说, 最好的储存这些信息的地方应该是SESSION, 首先它是PHP原生支持的机制. 其次, 它可以被配置到存放到任何地方(支持多机共享). 这个新特性, 提供了一些新的INI配置, 他们和APC的相关配置很类似: session.upload_progress.enabled[=1] : 是否启

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

因为用到PHP新版本,一些新特性必须要了解,且有些可以在开发时就使用,如果不使用,那么何必升级PHP版本呢,显得有些得不偿失了! 所以整理了一下 一些特性,有可能不全,待添加 PHP 5.3中的新特性 一.PHP 5.3中的新特性 1. 支持命名空间 (Namespace) 2. 支持延迟静态绑定(Late Static Binding) 3. 支持goto语句 4. 支持闭包.Lambda/Anonymous函数 5. 新增两个魔术方法__callStatic()和__invoke() 6.

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中,则只需要指定不同的命名空间即可,命名空间的分隔符为反斜杆\. select.php [php] view plaincopyprint? <?php namespace Zend\Db\Table; class Select {}这样即使其它命名空间下存在名为Select的类,程序在调用时也不会产生冲突.代

Drupal7配置之上传进度条

在Ubuntu中设备Drupal7的上传进度条是件比较简单的事情,但有不少兄弟却走了很多的弯路,所以有了这篇文章.在这里我先假设大家已经安装好了Drupal7,也可以通过网页正常访问和配置Drupal7. 首先是要安装uploadprogress,在Ubuntu中很简单地使用: sudo apt-get install php5-dev sudo pecl install uploadprogress 这样就可以下载和安装uploadprogress了,然后就是配置uploadprogress:

Php5.5新特性 Generators详解

在**PHP5.5.0**版本中,新增了生成器*(Generators)*特性,用于简化实现迭代器接口*(Iterator)*创建简单的迭代器的复杂性. 通过生成器,我们可以轻松的使用foreach迭代一系列的数据,而不需要事先在内存中构建要被迭代的对象,大大减少了内存开销. 当生成器函数被调用的时候,它会返回一个可迭代的对象,当对该对象进行迭代的时候,PHP将会在需要的时候调用生成器函数,并且在生成器使用新增的关键字yield产生一个新的值的时候,保存迭代器内部的状态.迭代器没有新的值需要产生

php5.5新特性之yield理解

今天,在阅读别人代码时,其中出现了一个陌生的关键字yield,想一探究竟,于是找到:http://php.net/manual/zh/language.generators.overview.php yield生成器是php5.5之后出现的,yield提供了一种更容易的方法来实现简单的迭代对象,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低. yield生成器允许你 在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组. 使用示例: /** *

ThinkPHP3.1新特性: 多层MVC支持

ThinkPHP基于MVC(Model-View-Controller,模型-视图-控制器)模式,不过均支持多层(multi-Layer)设计. 模型(Model)层:默认的模型层由Model类构成,但是随着项目的增大和业务体系的复杂化,单一的模型层很难解决要求,从3.1开始推出了多层Model的支持,设计思路很简单,不同的模型层仍然都继承自系统的Model类,但是在目录结构和命名规范上做了区分,例如在某个项目设计中需要区分数据层.逻辑层.服务层等不同的模型层,我们可以在项目的Lib目录下面创建

重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件

原文:重新想象 Windows 8.1 Store Apps (89) - 通信的新特性: 下载数据, 上传数据, 上传文件 [源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之通信的新特性 下载数据(显示下载进度,将下载数据保存到本地) 上传数据(显示上传进度) 上传文件 示例HTTP 服务端WebServer/HttpDemo.aspx.cs /* * 用于响应 http 请求 */ using System; using System.IO;

Spring 4支持的Java 8新特性一览

有众多新特性和函数库的Java 8发布之后,Spring 4.x已经支持其中的大部分.有些Java 8的新特性对Spring无影响,可以直接使用,但另有些新特性需要Spring的支持.本文将带您浏览Spring 4.0和4.1已经支持的Java 8新特性. Spring 4支持Java 6.7和8 Java 8编译器编译过的代码生成的.class文件需要在Java 8或以上的Java虚拟机上运行.由于Spring对反射机制和ASM.CGLIB等字节码操作函数库的重度使用,必须确保这些函数库能理解