PHP文件上传进度条基于并实现
如果你使用的是5.4之前的php,只能通过ajax,或者其他一些方法来实现。如果您使用的是php5.4,我们可以使用.结合js快速实现文件上传进度条。
下面我们就详细介绍一下PHP 5.4的这个新特性。
原理介绍:
当浏览器向服务器上传文件时,PHP会存储文件上传的详细信息(如上传时间、上传进度等),然后随着上传进度定期更新这些信息。这样浏览器就可以使用Ajax定期请求服务器端脚本,脚本会返回进度信息。浏览器可以根据此信息显示/更新进度条。
那么,文件上传信息是如何存储的呢?我们如何访问它?下面我们来详细解释一下。
PHP 5.4中引入了一些配置项(在php.ini中设置)..=“1”
..=“1”
..=“”
..名称=“”
..频率=“1%”
..=“1”
其中,控制功能是否开启默认开启,文件上传请求提交后是否清除的相关信息默认设置。
和 name 用于设置存储进度信息的变量名/键名。这两项的详细使用请看下文。
freq 和 两项用于设置服务器端更新进度信息的频率。正确设置这两项可以减轻服务器的负载。
在上传文件的表单中,需要为上传设置一个标识符,并通过该标识符来引用后续流程中的进度信息。具体来说,上传表单中需要有一个隐藏的input,它的 name 属性是php.ini中..name的值,它的值是你定义的一个标识符,如下:
名称=“”
值=“测试”/>
收到文件上传表单后,PHP 将在 $ 变量中创建一个新键。键名称是通过将 .. 的值与上面的自定义标识符连接而获得的字符串。可以这样获取: $name=(' ..name');
$key=('..').$_POST[$name];
$[$key];//这里是本次文件上传的进度信息
变量$[$key]的结构如下:
$[""]=数组(
""=>,//开始时间
""=>,//POST请求的总数据长度
""=>,//接收到的数据长度
"done"=>false,//请求是否完成,true表示完成,false表示未完成
//单个文件的信息
“文件”=>数组(
0=>数组(...),
//同一个请求中可以包含多个文件
1=>数组(...),
);
这样,我们就可以使用总和以及两项来得到进度百分比。
程序示例:
现在原理已经介绍完了,下面我们就基于PHP以及本例的代码库来完整实现一个文件上传进度条:://php--
上传表单,首先编写我们的上传表单页面index.php,代码如下:
=".php"="POST"="/form-data"
样式=“:15px0”=“”>
0%
注意表单中的 ..name 隐藏项。该值设置为测试。表单中只有一个文件上传输入。如果需要,您可以添加更多。
这里需要特别注意表单的属性。这里的设置指向当前页面中的某个页面。这非常重要。通过设置属性,页面中会显示表单提交后的页面,从而避免当前页面跳转,因为我们还是要在当前页面显示一个进度条。
# 该div用于显示进度条。
注意:不要忘记在index.php的开头添加()。
为了处理上传的文件,表单指向.php。我们处理.php中上传的文件并将其传输到当前目录。和平常的上传处理没有什么区别。 if(($['file1'][''])){
($['file1'][''],"./{$['file1']['name']}");
Ajax获取进度信息
这一步是关键。我们需要创建一个.php文件来读取进度信息;然后我们在index.php中添加代码,向.php发起Ajax请求,然后根据获取到的进度信息更新进度条。
.php的代码如下:();
$i=('..名称');
$key=("..").$_GET[$i];
if(!($[$key])){
$=$[$key][""];
$总计=$[$key][""];
回声$
}别的{
;
这里我们获取$变量中的进度信息,然后输出进度百分比。在index.php中,我们将以下代码添加到页面底部。为了简单起见,我们使用 jQuer:ss(){
$.get('.php',{'':'测试'},(数据){
=(数据);
$('#.label').html(+'%');
$('#.bar').css('宽度',+'%');
如果(
('()',100);
}别的{
$('#.label').html('完成!');
},'html');
$('#-form').((){
$('#').show();
('()',100);
});
当#-form提交时,我们显示进度条,然后重复调用()获取进度信息,并更新进度条,直到文件上传并‘!’显示。
完毕!
完整代码见:://php--
注意事项:
输入标签的位置
名称为 ..name 的输入标记必须放置在文件输入的前面。
要取消上传,可以通过设置$[$key][''] = true来取消当前上传,但只能取消正在上传的文件和尚未开始的文件。已成功上传的文件不会被删除。
与
()应该通过()来调用,这样可以保证一个请求返回后才开始下一个请求。如果使用(),则无法保证这一点,并且可能会导致进度条出现“不是向前而是向后”。
扫一扫在手机端查看
-
Tags : php上传完没进度条_PHP文件上传进度条
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。