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

php如何实现下载进度条

php 2022-03-06 02:03:38 732人浏览 才女
摘要

本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php如何实现下载进度条?PHP 远程文件下载的进度条实现download.php<?php // 当前文件:download.php $action = @$_

本文操作环境: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怎么实现下载进度条”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php怎么实现下载进度条”吧!php实现下载进度条的方法:1、创建“download.php”文件,代码如...
    527
    2023-09-29
  • Android实现下载进度条效果
    目录最终效果和对比vivo商店效果分析1 - 计算进度分析2 - 绘制圆角矩形解决方案分析3 - 绘制文字和交汇手势拓展完整代码具体使用最终效果和对比vivo商店效果 vivo应用商...
    410
    2023-09-29
    Android 进度条 Android 下载进度条
  • 微信小程序怎样实现下载进度条
    这篇文章主要介绍了微信小程序怎样实现下载进度条,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。效果:progress进度条是微信小程序的组件,...
    112
    2023-09-29
    微信小程序
  • CSS如何实现进度条和订单进度条
    小编给大家分享一下CSS如何实现进度条和订单进度条,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!简单地效果图如下:CSS实现进度条:html结构:<div&...
    382
    2023-09-29
  • css横向进度条和竖向进度条如何实现
    这篇文章将为大家详细讲解有关css横向进度条和竖向进度条如何实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、横向进度条<html><head><title>横向进...
    232
    2023-09-29
  • Bootstrap如何实现各种进度条
    小编给大家分享一下Bootstrap如何实现各种进度条,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一:默认的进度条创建一个基本...
    822
    2023-09-29
    bootstrap
  • javascript如何实现网页进度条
    这篇文章将为大家详细讲解有关javascript如何实现网页进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实例代码:<!DOCTYPE html&g...
    802
    2023-09-29
    javascript
  • Ajax如何实现加载进度条
    这篇文章将为大家详细讲解有关Ajax如何实现加载进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ajax beforeSend:先说说这个 beforeSend, 在请求发送前执行 比如 可以判断用户...
    101
    2023-09-29
  • AmazeUI如何实现加载进度条
    小编给大家分享一下AmazeUI如何实现加载进度条,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!AmazeUI 加载进度条的实现示例,具体如下:<!doct...
    431
    2023-09-29
  • Python如何实现酷炫进度条
    这篇文章主要介绍了Python如何实现酷炫进度条的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python如何实现酷炫进度条文章都会有所收获,下面我们一起来看看吧。1、自定义ProgressBar最原始的办法就...
    656
    2023-09-29
  • Android如何实现pk进度条
    要实现Android上的PK进度条,可以使用ProgressBar控件来实现。以下是一个简单的示例:1. 在XML布局文件中添加Pr...
    493
    2023-09-29
    Android
  • android如何实现圆形进度条
    要实现圆形进度条,可以使用Android的自定义控件来实现。首先,在layout文件中定义一个圆形进度条的布局,例如circle_p...
    348
    2023-09-29
    android
  • Jupyter Notebook如何实现进度条
    这篇文章主要介绍了Jupyter Notebook如何实现进度条,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。进度条可以使用python外部...
    636
    2023-09-29
    jupyter notebook
  • python如何实现普通进度条
    这篇文章将为大家详细讲解有关python如何实现普通进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。普通进度条利用打印功能print进行实时刷新显示for ...
    859
    2023-09-29
    python
  • shell脚本如何实现多彩进度条
    这篇文章将为大家详细讲解有关shell脚本如何实现多彩进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先贴代码#!/bin/bashi=0;str=""arr=("|&q...
    113
    2023-09-29
  • Android Canva如何实现渐变进度条
    本篇内容介绍了“Android Canva如何实现渐变进度条”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言标题说渐变进度条是为...
    703
    2023-09-29
  • css如何实现环形循环进度条
    本篇内容主要讲解“css如何实现环形循环进度条”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css如何实现环形循环进度条”吧!css实现环形循环进度条的方法:1、创建一个最外层的父级圆环;2、通...
    716
    2023-09-29
  • MFC圆形进度条(ProgressContrl)如何实现
    要实现MFC圆形进度条,可以按照以下步骤进行:1. 创建一个MFC对话框应用程序。2. 在对话框中添加一个Progress Cont...
    925
    2023-09-29
    MFC
  • java如何实现进度条显示
    在Java中可以通过使用`JProgressBar`类来实现进度条的显示。以下是一个简单的例子,演示了如何在Java中实现进度条的显...
    820
    2023-09-29
    java
  • Vue文件下载进度条的实现过程
    目录需求场景:实现原理:优化过程:下载方法的组件引入mixinVuex配置进度条最终效果图参考文章:需求场景: 1、大文件压缩过后依旧很大,接口返回response速度过慢,页面没有...
    336
    2023-09-29
    Vue下载进度条 vue文件下载
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作