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

本文介绍了PHP5.4引入的文件上传进度支持特性,通过设置php.ini配置启用该功能,并在表单中添加特定参数。在服务器端,可以使用$_SESSION来获取上传进度信息,包括开始时间、已处理大小、总大小等。同时,通过Ajax技术可以实时获取并显示上传进度,提供更好的用户体验。
摘要由CSDN通过智能技术生成

在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

" value="jiege" />

请选择文件:

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

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

doupload.php

1

2

3

4

5

session_start();

echo "

";

var_dump($_SESSION);

echo "

";

输出结果:

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

原文:http://www.cnblogs.com/zhepama/p/3930578.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值