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技术将产生的上传报告异步加载即可。
PHP5.4新特性之上传进度支持Upload progress的更多相关文章
- PHP上传进度支持(Upload progress in sessions)
文件上传进度反馈, 这个需求在当前是越来越普遍, 比如大附件邮件. 在PHP5.4以前, 我们可以通过APC提供的功能来实现. 或者使用PECL扩展uploadprogress来实现. 从PHP的角度 ...
- PHP5.3, PHP5.4, PHP5.5新特性
PHP 5.3中的新特性 1. 支持命名空间 (Namespace) 2. 支持延迟静态绑定(Late Static Binding) 3. 支持goto语句 4. 支持闭包.Lambda/Anony ...
- 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中,则只 ...
- PHP5.4新特性
PHP5.4 此次更新的关键新特性,包括:新增traits,更精简的Array数组语法,供测试使用的内建webserver,可以闭包使用的$this指针,实例化类成员访问, PHP 5.4.0 性能大 ...
- php5.4新特性实践
本机安装的是wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24-32b.exe集成包 自带了php5.4 1. 数组写法 定义一个数组 过去: $arr = ...
- PHP5.4新特性(转)
PHP5.4正式前两天发布了,之前有看了一些PHP5.4主要特性相关文章,因此在这里小结一下. 其中好几点更新是由Laruence贡献的!本文部分内容也是源自Laruence的博客. 1. Buid- ...
- php5.3新特性 之 mysql native driver(mysqlnd)
概述 本文主要写给sa看的.码农就不用看了. mysql native driver(mysqlnd) 自从php5.3.0开始成为官方源代码的一部分, 用来取代传统的mysql client lib ...
- PHP5.3新特性
1.首先对之前滥用的语法进行了规范 众所周知PHP在语言开发过程中有一个很好的容错性,导致在数组或全局变量中包含字符串不使用引号是可以不报错的,很多业余的开发者因为懒惰而产生的安全问题十分严重,之所以 ...
- Php5.5新特性 Generators详解
在PHP5.5.0版本中,新增了生成器(Generators)特性,用于简化实现迭代器接口(Iterator)创建简单的迭代器的复杂性. 通过生成器,我们可以轻松的使用foreach迭代一系列的数据, ...
随机推荐
- 算法笔记_188:历届试题 危险系数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点 ...
- [Python]网络爬虫(八):糗事百科的网络爬虫(v0.2)源码及解析
转自:http://blog.csdn.net/pleasecallmewhy/article/details/8932310 项目内容: 用Python写的糗事百科的网络爬虫. 使用方法: 新建一个 ...
- 【FAI】七日年化收益与万份收益的理解
七日年化收益:其实指的一年的收益(应该忽略”七日”),这里的七日指的是取最近七日年化的结果 万份收益:每万元每天的收益 可以使用下图来清晰识别: 例子: 10000元按照5%的七日年化收益计算的话: ...
- [原创]-[WEB]代码高亮工具
代码高亮显示,不是什么新鲜玩艺了,各种各样的插件多了去了. 一开始想在baidu空间里贴代码,用GeSHi生成的高亮HTML复制到编辑器就可以了,不过QQ空间却不行,复制过去的格式全部被清 ...
- 照片管家iOS-实现本地相册、视频、安全保护、社交分享源码下载Demo
<照片管家> APP功能: 1.本地照片批量导入与编辑 2.本地视频存储与播放 3.手势密码.数字密码.TouchID安全保护 4.QQ.微信.微博.空间社交分享 5.其他细节功能. 运用 ...
- RCF库ClientStub.setAutoReconnect
这个选项为false时,当连接断开时,第一次调用服务会抛出异常,而第二次调用时,也会自动连接.
- Foundations of Machine Learning: The PAC Learning Framework(2)
Foundations of Machine Learning: The PAC Learning Framework(2) (一)假设集有限在一致性下的学习界. 在上一篇文章中我们介绍了PAC-le ...
- 在Windows Service上安装运行Redis
CSDN下载RedisWatcher,运行InstallWatcher.msi,默认安装在C:\Program Files (x86)\RedisWatcher,修改watcher.conf # re ...
- ios 利用UIScrollView实现图片缩放
前言:我们希望做出的效果是,实现图片的分页滑动,且每张图片都可以双击或用手指捏合来缩放大小.上一篇讲解UIGestureRecognizer的中,我们介绍的UIPinchGestureRecogniz ...
- Sourcetree 更新git账号密码
删除Sourcetree 缓存文件(只需要删密码文件),文件位置: Mac: ~/Library/Application Support/SourceTree Windows: C:\Users\US ...