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迭代一系列的数据, ... 
随机推荐
- JavaSE入门学习17:Java面向对象之package(包)
			一Java包(package) 为了更好地组织类,Java提供了包机制,用于差别类名的命名空间. 包的作用: A把功能类似或相关的类或接口组织在 ... 
- 【Oracle】事务处理
			名词解释 DML:Data Manipulation Language (数据库操纵语言) 例如:DELETE.INSERT.UPDATE.SELECT DDL:Data Definition Lan ... 
- 转载【TP3.2】:使用PHP生成二维码
			转载:在网上down了一个二维码插件PHPQRcode,整合到了ThinkPHP 3.2.3,然后写了个外部自定义函数直接调用生成二维码,根据参数不同有不同尺寸效果,整合其实挺简单,分享给大家! 今天 ... 
- asp.net三层架构详解(转)
			摘自:http://www.cnblogs.com/cresuccess/archive/2008/12/10/1351675.html 一.数据库 ,) ) no ... 
- hdu--DFS
			DFS Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ... 
- jQuery:用 lightTreeview 实现树形分类菜单的功能 展开收缩分类代码
			最近在做前端开发项目中,需要用到树形结构.在网上查阅到了许多相应资源.其中觉得lightTreeview是一款非常不错的JQ树形分类菜单代码,结构简单,支持多级.还有详细的参数可以配置,以实现各种效果 ... 
- 使用Block在两个界面之间传值
			首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButton,其中UILabel是为了显示第二个视图控制器传过来的字符串,UIButton是为了push到第二个界面. 第 ... 
- JMeter学习笔记--使用URL回写来处理用户会话
			如果测试的Web应用系统使用URL回写而非Cookie来保存会话信息,那么测试人员需要做一些额外的工作来测试web站点 为了正确回应URL回写,JMeter需要解析从服务器收到的HTML,并得到唯一的 ... 
- 什么是FSK制式?什么是DTMF制式?
			目前国内来电显示制式有FSK.DTMF(双音频)两种,普通推广的是FSK."来电显示"又称"主叫号码显示"(Calling Identity Delivery) ... 
- Android vcard使用示例,生成vcf文件
			Android vcard使用示例,生成vcf文件 我们备份手机联系人时,导出到SD卡时,会在SD卡中生成一个vcf文件,用于保存联系人姓名,手机号码. vCard 规范容许公开交换个人数据交换 ( ... 
