一般来说,很少会有人直接用PHP输出
进度条
,但是也是可以实现的(需要JS).
原理和过程:
利用flush函数会提前输出缓冲区内容;
内容是主要的进度条;
循环>>
输出改变内容的JS;
暂停一秒,继续循环;
所有的输出都要先放到缓冲区的,直接echo的输出是等到页面结束才输出.
用户的函数:
sleep()
ob_start()
ob_flush()
flush()
或
ob_implicit_flush();
具体的代码就不写了,要自己动手哦,百度下每个函数的意思,加深理解和记忆.
Web应用中常需要提供文件上传的功能.典型的场景包括用户头像上传、相册图片上传等.当需要上传的文件比较大的时候,提供一个显示上传进度的进度条就很有必要了.
在PHP
①使用Flash,
Java,
ActiveX
API
第一种方法依赖第三方的浏览器插件,通用性不足,且易带来安全隐患.不过由于Flash的使用比较广泛,所以呢还是有很多网站使用Flash作为解决方案.
第二种方法的不足在于,它需要安装PHP的APC扩展库,要求用户能够控制服务器端的配置.另外,如果安装APC仅仅是为了实现一个上传进度条,那么显然有点杀鸡用牛刀的意思.
PHP
下面我们就详细介绍一下
的这个
session.upload_progress
新特性.
原理介绍
当浏览器向服务器端上传一个文件时,PHP将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中.然后,随着上传的进行,周期性的更新session中的信息.这样,浏览器端就可以使用Ajax周期性的请求一个服务器端脚本,由该脚本返回session中的进度信息;浏览器端的Javascript即可根据这些信息显示/更新进度条了.
那么,文件上传信息具体是如何存储的?我们要如何访问它呢?下面我们来详细说明.
中引入了一些配置项(在php.ini中进行设置)
复制代码
代码如下:
session.upload_progress.enabled
=
"1"
session.upload_progress.cleanup
session.upload_progress.prefix
"upload_progress_"
session.upload_progress.name
"PHP_SESSION_UPLOAD_PROGRESS"
session.upload_progress.freq
"1%"
session.upload_progress.min_freq
其中enabled控制upload_progress功能的开启与否,默认开启;cleanup
则设置当文件上传的请求提交完成后,是否清除session的php与js实现进度条的操作相关咨询,默认开启.
prefix
和
name
两项用来设置进度信息在session中存储的变量名/键名.关于这两项的详细使用见下文.
freq
min_freq
两项用来设置服务器端对进度信息的更新频率.合理的设置这两项可以减轻服务器的负担.
在上传文件的表单中,需要为该次上传设置一个标识符,并在此时此刻呢的过程中使用该标识符来引用进度信息.具体的,在上传表单中需要有一个隐藏的input,它的name属性为php.ini中
的值;它的值为一个由你自己定义的标识符.如下:
input
type="hidden"
name="?php
echo
ini_get('session.upload_progress.name');
"
value="test"
/
接到文件上传的表单后,PHP会在$_SESSION变量中新建键,键名是一个将session.upload_progress.prefix的值与上面你自定义的标识符连接后得到的字符串,可以这样得到:
$name
$key
ini_get('session.upload_progress.prefix')
.
$_POST[$name];
$_SESSION[$key];
//
这里就是此次文件上传的进度信息了
以上就是土嘎嘎小编为大家整理的php与js实现进度条的操作相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!