欢迎来到魔豆IT网-IT综合知识分析平台

php如何实现上传进度条

2020-09-14 00:23:19栏目 : 网络编程围观 : 11次

Php实现了上传进度条的方法:首先向服务器上传一个文件;然后用PHP在会话中存储这个文件上传的细节;然后使用Ajax定期请求一个服务器端脚本;最后通过浏览器端的Javascript显示更新进度条。

推荐:“PHP视频教程”

文件上传进度条的实现基本依靠JS插件或者HTML5 File API。其实PHP和ajax也可以实现这个功能。

PHP手册将会话上传进度介绍如下:

当会议。上传进度。启用ini选项打开,PHP可以在上传每个文件时监控上传进度。此信息对上传请求本身没有帮助,但是当文件上传时,应用程序可以向终端发送一个开机自检请求(例如,通过XHR)来检查此状态。当上传正在进行,并且发布了与INI中设置的session.upload_progress.name同名的变量时,可以在$_SESSION中获得上传进度。PHP检测到这个POST请求时,会在$_SESSION中添加一组数据,索引为session.upload_progress.prefix和SESSION的值。upload _ progress.name .一般这些键值可以通过读取INI设置获得,比如

Php.ini需要配置以下选项

session . upload _ progress . enabled = & quot;1 & quotsession . upload _ progress . clean up = & quot;1 & quotsession . upload _ progress . prefix = & quot;上传进度session . upload _ progress . name = & quot;PHP _ SESSION _ UPLOAD _ PROGRAMME & quot;session . upload _ progress . freq = & quot;1% & quot;session . upload _ progress . min _ freq = & quot;1 & quot启用控制上传进度功能是否打开,默认情况下是打开的。清理设置文件上传请求提交完成后是否清除会话的相关信息,默认情况下是打开的,如果需要调试$_SESSION,则应该关闭。前缀和名称用于设置存储在进程中的进度信息的变量名/键名。freq和min_freq两项用于设置服务器端进度信息的更新频率。这两项的合理设置可以减轻服务器的负担。以上传文件的形式,你需要为这次上传设置一个标识符,在后面的过程中使用这个标识符来引用进度信息。

具体来说,上传表单中需要有一个隐藏的输入,它的name属性是php.ini中session.upload_progress.name的值;它的值是你自己定义的标识符。代码如下:

& lt输入类型= & quot隐藏& quot名称= & quot& lt?PHP echo ini _ get(& # 39;session . upload _ progress . name & # 39;);?>。"value = & quot测试& quot/>。收到文件上传的表单后,PHP会在$_SESSION变量中创建新的键。键名是通过将session.upload_progress.prefix的值与上述用户定义的标识符相连接而获得的字符串。代码如下:

$ name = ini _ get(& # 39;session . upload _ progress . name & # 39;);$ key = ini _ get(& # 39;session . upload _ progress . prefix & # 39;)。$ _ POST[$ name];$ _ SESSION[$ key];//这里是这个文件上传的进度信息。变量$_SESSION[$key]的结构如下:

数组(& # 39;上传_进度_测试& # 39;= >;数组(& # 39;开始时间& # 39;= >;1491494993,//开始时间& # 39;content _ length & # 39= >;1410397,post请求的总数据长度& # 39;已处理的字节数& # 39;= >;1410397,//接收数据长度& # 39;完成& # 39;= >;True,//请求是否完成。true表示完成,false表示未完成& # 39;文件& # 39;= >;数组(0 = >;数组(& # 39;field _ name & # 39= >;& # 39;文件1 & # 39;,& # 39;名称& # 39;= >;& # 39;test.jpg & # 39,& # 39;tmp _ name & # 39= >;& # 39;d:\ \ wamp \ \ tmp \ \ PHP 181 . tmp & # 39;,& # 39;错误& # 39;= >;0,& # 39;完成& # 39;= >;真& # 39;开始时间& # 39;= >;1491494993,& # 39;已处理的字节数& # 39;= >;1410096,,),),);这样,我们可以使用content_length和bytes _ processed来获得进度百分比。

介绍完原理,我们来实现一个基于PHP和Javascript的文件上传进度条。

从index.php上传

& lt?PHP session _ start();?>。& lt!DOCTYPE html>。& lthtml lang = & quotzh-CN & quot;>。& lthead>。& ltmeta charset = & quotutf-8 & quot;>。& lttitle>。PHP(5.4)会话演示上传进度

上传文件upload.php

& lt?Phpif(is _ uploaded _ file($ _ files[& # 39;文件1 & # 39;][& # 39;tmp _ name & # 39])){//unlink($ _ FILES[& # 39;文件1 & # 39;][& # 39;tmp _ name & # 39]);$ fileName = & # 39pic _ & # 39。日期(& # 39;YmdHis & # 39)。mt_rand(10000,99999);$ ext = substr($ _ FILES[& # 39;文件1 & # 39;][& # 39;名称& # 39;],str rpos($ _ FILES[& # 39;文件1 & # 39;][& # 39;名称& # 39;],& # 39;。& # 39;));move _ uploaded _ FILE($ _ FILES[& # 39;文件1 & # 39;][& # 39;tmp _ name & # 39],$fileName。$ ext);}ajax获得上传进度progress.php

& lt?Phpsession _ start();$ I = ini _ get(& # 39;session . upload _ progress . name & # 39;);//session . upload _ progress . name = & quot;PHP _ SESSION _ UPLOAD _ PROGRAMME & quot;$ key = ini _ get(& quot;session . upload _ progress . prefix & quot;)。$ _ GET[$ I];//session . upload _ progress . prefix = & quot;上传进度。& # 39;测试& # 39;if(!空($ _ SESSION[$ key]){ $ current = $ _ SESSION[$ key][& quot;bytes _ processed & quot】;//接收数据的长度为$ total = $ _ SESSION[$ key][& quot;内容_长度& quot】;post请求echo $ current的总数据长度

展开剩余内容

分享到:

猜你喜欢

  • 下载1.3.1安装版的守护神云备份系统

    守护神云备份系统是专门针对百度网盘和金山快盘推出的资源存储备份工具。该工具支持这两个网络磁盘的实时和常规数据存储。功能描述自动将磁盘上的文件备份到金山快盘或百度网盘,软件完全免...

    2020-09-20
  • Excel汇总专家下载共享版6.0.1

    快速批量处理多个Excel文件,自动完成各种汇总任务,解决跨Excel文件汇总的问题。大大提高你的工作效率。汇总效率极高。以一个65536行20列的报表为例,总结一个报表只需要...

    2020-09-20
  • 藏文转换大师下载2016绿色版

    藏文翻译大师是一款多码藏汉双语界面的藏藏文翻译软件。藏文翻译大师支持不同编码类型的藏文文件翻译,如喜玛拉雅、桑巴他、潘地塔、童渊、方正、华光等多种相同编码字体,解决了不同编码藏...

    2020-09-20
  • 微压VeryZIP下载1.0.1.8官方版

    Micro-pressure是一款完全免费的解压压缩软件,不再担心传统压缩软件的共享版、40天试用期、购买许可证、破解版、修订版,完美支持包括win8、win7、vista、w...

    2020-09-20
热门标签