91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php怎么實現下載進度條

發布時間:2021-10-28 11:03:24 來源:億速云 閱讀:302 作者:iii 欄目:編程語言

本篇內容主要講解“php怎么實現下載進度條”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“php怎么實現下載進度條”吧!

php實現下載進度條的方法:1、創建“download.php”文件,代碼如“switch ($action) {case 'prepare-download'...}”;2、通過創建js代碼顯示進度條即可。

php怎么實現下載進度條

本文操作環境: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);

}

到此,相信大家對“php怎么實現下載進度條”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

彰武县| 清河县| 恩平市| 怀柔区| 同仁县| 郓城县| 泸水县| 连山| 南康市| 临清市| 泌阳县| 桓台县| 贡觉县| 宾阳县| 南召县| 沙河市| 岗巴县| 全椒县| 辽中县| 璧山县| 望都县| 永宁县| 沂南县| 江口县| 高青县| 乐都县| 辽宁省| 廉江市| 祥云县| 阿尔山市| 东方市| 荆州市| 轮台县| 于田县| 武乡县| 桐乡市| 吉林省| 宁城县| 喀喇| 邻水| 长泰县|