亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

【CLI】使用Curl下載文件實(shí)時(shí)進(jìn)度條顯示

sydMobile / 1557人閱讀

摘要:最近在搗鼓命令行下的編程,下載文件總是一個(gè)難熬的過(guò)程,如果有進(jìn)度條就好很多了先上一個(gè)進(jìn)度條的擴(kuò)展包,還是不錯(cuò)的還是挺好看的做為一個(gè)很常用的下載方式,這里簡(jiǎn)單的使用方式初始化一個(gè)設(shè)置請(qǐng)求的不直接輸出,而是通過(guò)返回上面是一個(gè)很簡(jiǎn)單的例子,如

最近在搗鼓命令行下的編程,下載文件總是一個(gè)難熬的過(guò)程,如果有進(jìn)度條就好很多了?。?!


先上一個(gè)進(jìn)度條的擴(kuò)展包,還是不錯(cuò)的https://github.com/dariuszp/cli-progress-bar

還是挺好看的!


curl做為 PHP 一個(gè)很常用的下載方式,這里簡(jiǎn)單的使用方式;

// 初始化一個(gè) curl
$ch = curl_init();
// 設(shè)置請(qǐng)求的 url
curl_setopt($ch, CURLOPT_URL, $url);
// 
curl_setopt($ch, CURLOPT_HEADER, 0);
// 不直接輸出,而是通過(guò) curl_exec 返回
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

if (false === ($stream = curl_exec($ch))) {
    throw new Exception(curl_errno($ch));
}

curl_close($ch);

return $stream;

上面是一個(gè)很簡(jiǎn)單的例子,如果一個(gè)文件很大,那么用戶就需要等待很長(zhǎng)的時(shí)間,這時(shí)候我們就應(yīng)該加上進(jìn)度條的效果:

class Request
{
    protected $bar;
    // 是否下載完成
    protected $downloaded = false;

    public function __construct()
    {
        // 初始化一個(gè)進(jìn)度條
        $this->bar = new CliProgressBar(100);
        $this->bar->display();
        $this->bar->setColorToRed();
    }
    
    function download($url)
    {
        $ch = curl_init();
    
        // 從配置文件中獲取根路徑
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
        // 開(kāi)啟進(jìn)度條
        curl_setopt($ch, CURLOPT_NOPROGRESS, 0);
        // 進(jìn)度條的觸發(fā)函數(shù)
        curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, "progress");
        // ps: 如果目標(biāo)網(wǎng)頁(yè)跳轉(zhuǎn),也跟著跳轉(zhuǎn)
        // curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    
        if (false === ($stream = curl_exec($ch))) {
            throw new Exception(curl_errno($ch));
        }
    
        curl_close($ch);
    
        return $stream;
    }
    
    /**
     * 進(jìn)度條下載.
     *
     * @param $ch
     * @param $countDownloadSize    總下載量
     * @param $currentDownloadSize  當(dāng)前下載量
     * @param $countUploadSize      
     * @param $currentUploadSize
     */
    public function progress($ch, $countDownloadSize, $currentDownloadSize, $countUploadSize, $currentUploadSize)
    {
        
         // 等于 0 的時(shí)候,應(yīng)該是預(yù)讀資源不等于0的時(shí)候即開(kāi)始下載
         // 這里的每一個(gè)判斷都是坑,多試試就知道了
        if (0 === $countDownloadSize) {
            return false;
        }
        // 有時(shí)候會(huì)下載兩次,第一次很小,應(yīng)該是重定向下載
        if ($countDownloadSize > $currentDownloadSize) {
            $this->downloaded = false;
            // 繼續(xù)顯示進(jìn)度條
        }
        // 已經(jīng)下載完成還會(huì)再發(fā)三次請(qǐng)求
        elseif ($this->downloaded) {
            return false;
        }
        // 兩邊相等下載完成并不一定結(jié)束,
        elseif ($currentDownloadSize === $countDownloadSize) {
            return false;
        }
        
        // 開(kāi)始計(jì)算
        $bar = $currentDownloadSize / $countDownloadSize * 100;
        $this->bar->progress($bar);
    }
}
(new Request)->download("http://www.shiguopeng.cn/database.sql");

千萬(wàn)千萬(wàn)注意下載回調(diào)的判斷那里的坑!??!

還有一個(gè)問(wèn)題:如果跳轉(zhuǎn)下載的,設(shè)置了curl也跟著跳轉(zhuǎn),返回的文件將會(huì)出問(wèn)題,

我下載的是zip文件,會(huì)導(dǎo)致文件頭有第一此請(qǐng)求的HTTP響應(yīng)頭的內(nèi)容,

所以看自己需要curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/28472.html

相關(guān)文章

  • PHP 遠(yuǎn)程文件下載進(jìn)度實(shí)現(xiàn)

    摘要:原文地址實(shí)現(xiàn)遠(yuǎn)程下載文件到服務(wù)端并不是什么新鮮玩意,用等都能夠輕易實(shí)現(xiàn)。原理也許你在搜索下載進(jìn)度條的時(shí)候會(huì)看到有些文章使用的輸出控制函數(shù)之類的控制緩沖區(qū)來(lái)實(shí)現(xiàn)進(jìn)度條。 原文地址:https://prinzeugen.net/implem... PHP 實(shí)現(xiàn)遠(yuǎn)程下載文件到服務(wù)端并不是什么新鮮玩意,用 cURL、file_get_contents、fopen 等都能夠輕易實(shí)現(xiàn)。 但是這幾種...

    YJNldm 評(píng)論0 收藏0
  • Vue+ElementUI: 手把手教你做一個(gè)audio組件

    摘要:不顯示下載不顯示靜音不顯示音量條不顯示進(jìn)度條只能播放一個(gè)不要快進(jìn)按鈕例如父組件這樣回雪月花青春一點(diǎn)點(diǎn)語(yǔ)法大多數(shù)時(shí)候,我們希望頁(yè)面上播放一個(gè)音頻時(shí),其他音頻可以暫停。可以把一個(gè)類數(shù)組轉(zhuǎn)化成數(shù)組,這個(gè)是我常用的。 showImg(https://segmentfault.com/img/remote/1460000016177005?w=619&h=343); 目的 本項(xiàng)目的目的是教你如...

    U2FsdGVkX1x 評(píng)論0 收藏0
  • element-ui+vue-cli3.0:el-upload

    摘要:最近項(xiàng)目中涉及很多文件上傳的地方,然后文件上傳又有很多限制。比如文件大小限制,文件個(gè)數(shù)限制,文件類型限制,文件上傳后的列表樣式自定義,包括上傳進(jìn)度條等問(wèn)題。下面是我對(duì)的上傳組件的一些改造,點(diǎn)擊查看源碼。 最近項(xiàng)目中涉及很多文件上傳的地方,然后文件上傳又有很多限制。比如文件大小限制,文件個(gè)數(shù)限制,文件類型限制,文件上傳后的列表樣式自定義,包括上傳進(jìn)度條等問(wèn)題。下面是我對(duì)element-u...

    yy13818512006 評(píng)論0 收藏0
  • 在Vue項(xiàng)目中使用WebUploader實(shí)現(xiàn)文件上傳

    摘要:簡(jiǎn)介是由團(tuán)隊(duì)開(kāi)發(fā)的一個(gè)簡(jiǎn)單的以為主,為輔的現(xiàn)代文件上傳組件。采用大文件分片并發(fā)上傳,極大的提高了文件上傳效率。另外分片傳輸能夠更加實(shí)時(shí)的跟蹤上傳進(jìn)度。選擇文件的按鈕。 簡(jiǎn)介:WebUploader是由Baidu WebFE(FEX)團(tuán)隊(duì)開(kāi)發(fā)的一個(gè)簡(jiǎn)單的以HTML5為主,F(xiàn)LASH為輔的現(xiàn)代文件上傳組件。在現(xiàn)代的瀏覽器里面能充分發(fā)揮HTML5的優(yōu)勢(shì),同時(shí)又不摒棄主流IE瀏覽器,沿用原來(lái)的...

    mindwind 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<