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)

相关推荐

  • 1.如何用flink表和sql建立pom文件

    技术1、如何用flink的table和sql​构建pom文件这篇文章主要讲解了“1、如何用flink的table和sql构建pom文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研

    攻略 2021年12月23日
  • 怎么部署MySQL Group Replication

    技术怎么部署MySQL Group Replication这篇文章主要介绍“怎么部署MySQL Group Replication”,在日常操作中,相信很多人在怎么部署MySQL Group Replication问题上

    攻略 2021年11月18日
  • Python代码列表怎么求并集,交集,差集

    技术Python代码列表怎么求并集,交集,差集本篇内容介绍了“Python代码列表怎么求并集,交集,差集”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希

    攻略 2021年11月12日
  • MySQL多表操作与事务

    技术MySQL多表操作与事务 MySQL多表操作与事务一、多表查询1.笛卡尔积概念:有两个集合A,B,取这两个集合的所有组成情况。要完成多表查询需要消除无用的数据。2.多表查询的分类内连接查询1.隐式内

    礼包 2021年11月4日
  • java中基于线层池Spring-quartz如何实现动态增删除改和暂停恢复定时任务

    技术java中基于线层池Spring-quartz如何实现动态增删除改和暂停恢复定时任务这篇文章主要讲解了“java中基于线层池Spring-quartz如何实现动态增删除改和暂停恢复定时任务”,文中的讲解内容简单清晰,

    攻略 2021年11月15日
  • OpenCV识别人脸的源码怎么编写

    技术OpenCV识别人脸的源码怎么编写这篇文章主要介绍“OpenCV识别人脸的源码怎么编写”,在日常操作中,相信很多人在OpenCV识别人脸的源码怎么编写问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

    攻略 2021年11月29日