摘要:最近在搗鼓命令行下的編程,下載文件總是一個(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
摘要:原文地址實(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)。 但是這幾種...
摘要:不顯示下載不顯示靜音不顯示音量條不顯示進(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)目的目的是教你如...
摘要:最近項(xiàng)目中涉及很多文件上傳的地方,然后文件上傳又有很多限制。比如文件大小限制,文件個(gè)數(shù)限制,文件類型限制,文件上傳后的列表樣式自定義,包括上傳進(jìn)度條等問(wèn)題。下面是我對(duì)的上傳組件的一些改造,點(diǎn)擊查看源碼。 最近項(xiàng)目中涉及很多文件上傳的地方,然后文件上傳又有很多限制。比如文件大小限制,文件個(gè)數(shù)限制,文件類型限制,文件上傳后的列表樣式自定義,包括上傳進(jìn)度條等問(wèn)題。下面是我對(duì)element-u...
摘要:簡(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)的...
閱讀 1806·2021-09-23 11:34
閱讀 2526·2021-09-22 15:45
閱讀 13329·2021-09-22 15:07
閱讀 2356·2021-09-02 15:40
閱讀 4248·2021-07-29 14:48
閱讀 1149·2019-08-30 15:55
閱讀 3306·2019-08-30 15:55
閱讀 2250·2019-08-30 15:55