返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php如何实现下载进度条
  • 729
分享到

php如何实现下载进度条

php 2022-03-06 02:03:38 729人浏览
摘要

php实现下载进度条的方法:1、创建“download.php”文件,代码如“switch ($action) {case 'prepare-download'...}”;2、通过创建js代码显示进度条即可。

本文操作环境:windows7系统、PHP7.1版、DELL G3电脑

php如何实现下载进度条?

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

download.php

<?php
// 当前文件:download.php

$action = @$_GET['action'];

// 自己获取这些信息
$remote_url  = get_remote_file_url();
$file_size   = get_remote_file_size($remote_url);
$tmp_path    = get_tmp_path();

switch ($action) {
    case 'prepare-download':
        // 下载缓存文件夹
        $download_cache = __DIR__."/download_cache";

        if (!is_dir($download_cache)) {
            if (false === mkdir($download_cache)) {
                exit('创建下载缓存文件夹失败,请检查目录权限。');
            }
        }

        $tmp_path = $download_cache."/update_".time().".zip";

        save_tmp_path(); // 这里保存临时文件地址

        return JSON(compact('remote_url', 'tmp_path', 'file_size'));

        break;

    case 'start-download':

        // 这里检测下 tmp_path 是否存在

        try {
            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);

}

--结束END--

本文标题: php如何实现下载进度条

本文链接: https://www.lsjlt.com/news/432.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • php如何实现下载进度条
    php实现下载进度条的方法:1、创建“download.php”文件,代码如“switch ($action) {case 'prepare-download'...}”;2、通过创建js代码显示进度条即可。 ...
    729
    2023-03-24
    php
  • Android实现下载进度条效果
    vivo商店在下载应用的时候,底部有一个圆角矩形的下载进度条,中间有一个进度文字,而且进度和文字交汇的时候,交汇部分的文字会从蓝色边为白色,会有一种一半白色字,一半蓝色字的效果。本文将仿照该样式实现一个 ...
    404
    2023-03-24
    Android 进度条 Android 下载进度条
  • 微信小程序怎样实现下载进度条
    这篇文章主要介绍了微信小程序怎样实现下载进度条,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。效果:progress进度条是微信小程序的组件,和HTML5的进度条progres ...
    104
    2023-03-24
    微信小程序
  • Bootstrap如何实现各种进度条
    小编给大家分享一下Bootstrap如何实现各种进度条,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:默认的进度条创建一个基本的进度条的步骤如下:添加一个带有 ...
    819
    2023-03-24
    bootstrap
  • javascript如何实现网页进度条
    这篇文章将为大家详细讲解有关javascript如何实现网页进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实例代码:#bo ...
    791
    2023-03-24
    javascript
  • Jupyter Notebook如何实现进度条
    这篇文章主要介绍了Jupyter Notebook如何实现进度条,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。进度条可以使用python外部库创建进度条,它可以实时更新代码运 ...
    636
    2023-03-24
    jupyter notebook
  • python如何实现普通进度条
    这篇文章将为大家详细讲解有关python如何实现普通进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。普通进度条利用打印功能print进行实时刷新显示for i in range(1, 101): ...
    859
    2023-03-24
    python
  • Vue文件下载进度条的实现过程
    这篇文章主要介绍了Vue文件下载进度条的实现原理,通过使用onDownloadProgress方法API获取进度及文件大小等数据,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 ...
    279
    2023-03-24
    Vue下载进度条 vue文件下载
  • vue项目实现文件下载进度条功能
    这篇文章主要介绍了vue项目实现文件下载进度条功能,本文通过具体实现代码给大家介绍的非常详细,需要的朋友可以参考下 ...
    396
    2023-03-24
    vue文件下载进度条 vue下载进度条
  • js如何实现音频控制进度条功能
    这篇文章主要介绍js如何实现音频控制进度条功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:代码如下:meta name="author" con ...
    350
    2023-03-24
    js
  • 如何实现基于Blod的ajax进度条
    这篇文章主要介绍如何实现基于Blod的ajax进度条,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!普通的浏览器下载在web开发中,如果要实现下载功能,往往都是使用新开web页面或者是使用iframe的形式。实现起来其 ...
    117
    2023-03-24
    ajax blod
  • Bootstrap3如何实现进度条
    这篇文章将为大家详细讲解有关Bootstrap3如何实现进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基本样式 div class="progress ...
    747
    2023-03-24
    bootstrap
  • html5如何实现进度条
    本篇内容主要讲解“html5如何实现进度条”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“html5如何实现进度条”吧!在html5中,可以利用“ ...
    840
    2023-03-24
    html5
  • 利用Python展示文件下载进度条
    这篇文章主要介绍了Python展示文件下载进度条,requests库相信大家都用过,做接口测试少不了它。其实我们平时下载文件,也可以用requests做到的,通过一些地址,下面我们就来看看具体是什么样的地址及详细内容,需要的朋友可以参考一下 ...
    731
    2023-03-24
    Python文件下载进度条 文件下载进度条
  • Android文件下载进度条的实现代码
    main.xml: 代码如下:?xml version="1.0" encoding="utf-8"?>LinearLayout xmlns:android="http://schemas.android.com/apk/res/and ...
    463
    2023-03-24
    进度条 Android
  • js如何实现自定义进度条效果
    这篇文章主要介绍js如何实现自定义进度条效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:代码如下: meta charset="utf-8" ...
    294
    2023-03-24
    js
  • bootstrap中如何实现路径导航、分页、进度条
    这篇文章给大家分享的是有关bootstrap中如何实现路径导航、分页、进度条的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。路径导航 a href="#" ...
    572
    2023-03-24
    bootstrap
  • react-native如何实现圆弧拖动进度条
    这篇文章主要为大家展示了“react-native如何实现圆弧拖动进度条”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“react-native如何实现圆弧拖动进度条”这篇文章吧。具体如下:先上效 ...
    489
    2023-03-24
    react native
  • Ajax如何实现上传文件进度条Codular
    这篇文章主要介绍了Ajax如何实现上传文件进度条Codular,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Lets Code我们将从HTML结构开始,然后是JavaScri ...
    559
    2023-03-24
    ajax
  • HTML5如何实现进度条特效
    这篇文章将为大家详细讲解有关HTML5如何实现进度条特效,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。t ...
    663
    2023-03-24
    html5
热门问答
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作