我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

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来取消当前上传,但只能取消正在上传的文件和尚未开始的文件。已成功上传的文件不会被删除。

()应该通过()来调用,这样可以保证一个请求返回后才开始下一个请求。如果使用(),则无法保证这一点,并且可能会导致进度条出现“不是向前而是向后”。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/7952.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线