php怎么实现下载进度条

技术php怎么实现下载进度条本篇内容主要讲解“php怎么实现下载进度条”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php怎么实现下载进度条”吧!

本文主要讲解“如何在php中实现下载进度条”,感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让边肖带你学习“如何用php实现下载进度条”!

php下载进度条的方法如下:1。创建一个“download.php”文件,代码为“switch($ action){ case ' prepare-download '.}";2.创建js代码来显示进度条。

php怎么实现下载进度条

操作环境:Windows7系统,PHP 7.1版本,DELL G3电脑。

php如何实现下载进度条?

PHP 远程文件下载的进度条实现

download.php

?服务器端编程语言(Professional Hypertext Preprocessor的缩写)

//当前文件:download.php。

$ action=@ $ _ GET[' action '];

//自己获取这些信息。

$ remote _ URL=get _ remote _ file _ URL();

$ file _ size=get _ remote _ file _ size($ remote _ URL);

$ tmp _ path=get _ tmp _ path();

开关($ action){ 0

案例“准备-下载”:

//下载缓存文件夹。

$download_cache=__DIR__。/download _ cache ';

if(!is _ dir($ download _ cache)){ 0

if(false===mkdir($ download _ cache)){ 0

退出('无法创建下载缓存文件夹,请检查目录权限。');

}

}

$tmp_path=$download_cache。/update_ '。时间()。zip ';

save _ tmp _ path();//在此保存临时文件地址。

returnjson(compact('remote_url ',' tmp_path ',' file _ size '));

打破;

案例“开始-下载”:

//检查此处是否存在tmp_path。

尝试{

n

bsp;  set_time_limit(0);
            touch($tmp_path);
            // 做些日志处理
            if ($fp = fopen($remote_url, "rb")) {
                if (!$download_fp = fopen($tmp_path, "wb")) {
                    exit;
                }
                while (!feof($fp)) {
                    if (!file_exists($tmp_path)) {
                        // 如果临时文件被删除就取消下载
                        fclose($download_fp);
                        exit;
                    }
                    fwrite($download_fp, fread($fp, 1024 * 8 ), 1024 * 8);
                }
                fclose($download_fp);
                fclose($fp);
            } else {
                exit;
            }
        } catch (Exception $e) {
            Storage::remove($tmp_path);
            exit('发生错误:'.$e->getMessage());
        }
        return json(compact('tmp_path'));
        break;
    case 'get-file-size':
        // 这里检测下 tmp_path 是否存在
        if (file_exists($tmp_path)) {
            // 返回 JSON 格式的响应
            return json(['size' => filesize($tmp_path)]);
        }
        break;
    default:
        # code...
        break;
}

js

// 咋触发这个函数我就不举例了
function downloadFile() {
    var file_size = 0;
    var progress  = 0;
    console.log("Prepared to download");
    $.ajax({
        url: './download.php?action=prepare-download',
        type: 'GET',
        dataType: 'json',
        beforeSend: function() {
            $('#update-button').html('<i class="fa fa-spinner fa-spin"></i> 正在准备').prop('disabled', 'disabled');
        },
    })
    .done(function(json) {
        console.log(json);
        file_size = json.file_size;
        $('#file-size').html(file_size);
        // 显示进度条
        console.log("started downloading");
        $.ajax({
            url: './download.php?action=start-download',
            type: 'POST',
            dataType: 'json'
        })
        .done(function(json) {
            // set progress to 100 when got the response
            progress = 100;
            console.log("Downloading finished");
            console.log(json);
        })
        .fail(showAjaxError);
        var interval_id = window.setInterval(function() {
            $('#imported-progress').html(progress);
            $('.progress-bar').css('width', progress+'%').attr('aria-valuenow', progress);
            if (progress == 100) {
                clearInterval(interval_id);
                // 到此远程文件下载完成,继续其他逻辑
            } else {
                $.ajax({
                    url: './download.php?action=get-file-size',
                    type: 'GET'
                })
                .done(function(json) {
                    progress = (json.size / file_size * 100).toFixed(2);
                    updateProgress(progress);
                    console.log("Progress: "+progress);
                })
                .fail(showAjaxError);
            }
        }, 300);
    })
    .fail(showAjaxError);
}

到此,相信大家对“php怎么实现下载进度条”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/53565.html

(0)

相关推荐

  • 和某人交谈用英语怎么说,与什么什么交流用英语怎么说

    技术和某人交谈用英语怎么说,与什么什么交流用英语怎么说communicate with sb.或者chat with sb.communicate的基本意思是“传达”“表达”,指把信息和某人交谈用英语怎么说、知识、性能等

    生活 2021年10月29日
  • ubuntu 访问win10共享文件(ubuntu 20.10安装教程)

    技术如何部署Ubuntu20.04 + k8s 1.21.0开发环境这篇文章主要为大家展示了“如何部署Ubuntu20.04 + k8s 1.21.0开发环境”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小

    攻略 2021年12月18日
  • 设计模式21-状态模式,State)

    技术设计模式21-状态模式,State) 设计模式21-状态模式(State)如果一个实体具备状态,且在不同状态下会在同一业务场景执行不同的业务逻辑时,就可以考虑使用状态模式。设计模式21-状态模式(S

    礼包 2021年10月28日
  • GBase8s cm配置方法有哪些

    技术GBase8s cm配置方法有哪些本篇内容介绍了“GBase8s cm配置方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,

    攻略 2021年11月12日
  • ADO.NET存储过程调用举例分析

    技术ADO.NET存储过程调用举例分析这篇文章主要讲解了“ADO.NET存储过程调用举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ADO.NET存储过程调用举例分

    攻略 2021年12月3日
  • Mybatis与spring-data-jpa获取insert之后的自增长id是什么

    技术Mybatis与spring-data-jpa获取insert之后的自增长id是什么本篇文章为大家展示了Mybatis与spring-data-jpa获取insert之后的自增长id是什么,内容简明扼要并且容易理解,

    攻略 2021年10月21日