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

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

 

 
1
2
3
4
5
6
)
.
]
.
.
)

 

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

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


upload.php

 

 
1
2
3
4
5
>
>
>
>
>

 

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

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

 

doupload.php

 

 
1
2
3
4
5
<?php
;
;
;
;

 

输出结果:

 

 
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
{
>
{
>
)
>
)
>
)
>
)
>
{
>
{
>
>
>
>
)
>
)
>
)
>
)
}
}
}
}

 

我们可以看到,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
{
>
{
//请求时间
)
//上传的所有文件的总大小
)
//上传已完成的大小
)
//是否已经处理完毕
)
//所有文件
{
>
{
//表单名称
>
//原文件名称
>
//上传的临时文件名称
//上传产生的错误
)
//该文件是否已经处理完毕
)
//请求时间
)
//已经处理的文件大小
)
}
}
}
}

 

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

相关文章: