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)

相关推荐

  • vue自定义指令设置(vue自定义指令在什么场景使用)

    技术vue中自定义指令怎么用小编给大家分享一下vue中自定义指令怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、v-drag需求:鼠标拖动元素思路:元素偏移量 = 鼠标滑动后的坐标 - 鼠标初始

    攻略 2021年12月16日
  • 南辕北辙原文及翻译,《南辕北辙》的古文意思和寓意

    技术南辕北辙原文及翻译,《南辕北辙》的古文意思和寓意1南辕北辙原文及翻译、《南辕北辙》的古文意思如下:
    我今天来上朝的时候,在大路上遇见了一个人,正在面朝北面驾着他的车,他告诉我说:‘我想到楚国去。’我说:‘您到楚国去,

    生活 2021年10月23日
  • JBuilder下调试java程序的示例分析

    技术JBuilder下调试java程序的示例分析JBuilder下调试java程序的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。初学者总问如何

    攻略 2021年12月2日
  • 心形线,如何用几何画板画出笛卡尔心形线

    技术心形线,如何用几何画板画出笛卡尔心形线1心形线、新建参数。右键绘图区空白处,“新建参数”,标签为a,数值为4,单位“无”。
    2、快捷键“Ctrl+G”,调出绘制新函数编辑器。点“方程”,选极坐标方程。在编辑

    生活 2021年10月30日
  • 树莓派如何使用Kodi播放高清电影

    技术树莓派如何使用Kodi播放高清电影这篇文章将为大家详细讲解有关树莓派如何使用Kodi播放高清电影,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。先说解决办法,再说解决过

    攻略 2021年11月19日
  • 判断xml节点是否有属性(xml判断节点属性名是否存在)

    技术如何浅析XML节点类型种类及作用这篇文章将为大家详细讲解有关如何浅析XML节点类型种类及作用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。当将XML文档作为节点树读入

    攻略 2021年12月19日