亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP下載遠程文件類源碼,帶詳細注釋,還支持斷點續傳

2024-09-04 11:45:10
字體:
來源:轉載
供稿:網友

網站經常要用到下載遠程圖片的功能,有時還要下載.doc文檔,所以就用php開發了一個下載遠程文件的類,這個類支持斷點續傳下載,源代碼中有具體的注釋及使用說明案例.

程序主要是使用 HTTP 協議下載文件,HTTP1.1協議必須指定文檔結束后關閉鏈接,否則讀取文檔時無法使用feof判斷結束,可以有兩種使用方法,具體請下載查看源碼,代碼如下:

  1. <?php 
  2. /** 
  3.  * 下載遠程文件類支持斷點續傳  
  4.  */ 
  5. class HttpDownload { 
  6.     private $m_url = ""
  7.      private $m_urlpath = ""
  8.      private $m_scheme = "http"
  9.      private $m_host = ""
  10.      private $m_port = "80"
  11.      private $m_user = ""
  12.      private $m_pass = ""
  13.      private $m_path = "/"
  14.      private $m_query = ""
  15.      private $m_fp = ""
  16.      private $m_error = ""
  17.     private $m_httphead = "" ; 
  18.     private $m_html = ""
  19.  
  20.     /** 
  21.      * 初始化  
  22.      */ 
  23.     public function PrivateInit($url){ 
  24.         $urls = ""
  25.         $urls = @parse_url($url); 
  26.         $this->m_url = $url
  27.         if(is_array($urls)) { 
  28.             $this->m_host = $urls["host"]; 
  29.             if(!emptyempty($urls["scheme"])) $this->m_scheme = $urls["scheme"]; 
  30.             if(!emptyempty($urls["user"])) $this->m_user = $urls["user"]; 
  31.             if(!emptyempty($urls["pass"])) $this->m_pass = $urls["pass"]; 
  32.             if(!emptyempty($urls["port"])) $this->m_port = $urls["port"]; 
  33.             if(!emptyempty($urls["path"])) $this->m_path = $urls["path"]; 
  34.             $this->m_urlpath = $this->m_path; 
  35.             if(!emptyempty($urls["query"])) { 
  36.                  $this->m_query = $urls["query"]; 
  37.                  $this->m_urlpath .= "?".$this->m_query; 
  38.              } 
  39.           } 
  40.     } 
  41.  
  42.     /** 
  43.     * 打開指定網址 
  44.     */ 
  45.     function OpenUrl($url) { 
  46.         #重設各參數 
  47.         $this->m_url = ""
  48.         $this->m_urlpath = ""
  49.         $this->m_scheme = "http"
  50.         $this->m_host = ""
  51.         $this->m_port = "80"
  52.         $this->m_user = ""
  53.         $this->m_pass = ""
  54.         $this->m_path = "/"
  55.         $this->m_query = ""
  56.         $this->m_error = ""
  57.         $this->m_httphead = "" ; 
  58.         $this->m_html = ""
  59.         $this->Close(); 
  60.         #初始化系統 
  61.         $this->PrivateInit($url); 
  62.         $this->PrivateStartSession(); 
  63.     } 
  64.  
  65.     /** 
  66.     * 獲得某操作錯誤的原因 
  67.     */ 
  68.     public function printError() { 
  69.         echo "錯誤信息:".$this->m_error; 
  70.         echo "具體返回頭:<br>"
  71.         foreach($this->m_httphead as $k=>$v) {  
  72.             echo "$k => $v <br>rn";  
  73.         } 
  74.     } 
  75.  
  76.     /** 
  77.     * 判別用Get方法發送的頭的應答結果是否正確 
  78.     */ 
  79.     public function IsGetOK() { 
  80.         ifereg("^2",$this->GetHead("http-state")) ) {  
  81.             return true;  
  82.         } else { 
  83.             $this->m_error .= $this->GetHead("http-state")." - ".$this->GetHead("http-describe")."<br>"
  84.             return false; 
  85.         } 
  86.     } 
  87.      
  88.     /** 
  89.     * 看看返回的網頁是否是text類型 
  90.     */ 
  91.     public function IsText() { 
  92.         if (ereg("^2",$this->GetHead("http-state")) && eregi("^text",$this->GetHead("content-type"))) {  
  93.             return true;  
  94.         } else { 
  95.             $this->m_error .= "內容為非文本類型<br>"
  96.             return false; 
  97.         } 
  98.     } 
  99.     /** 
  100.     * 判斷返回的網頁是否是特定的類型 
  101.     */ 
  102.     public function IsContentType($ctype) { 
  103.         if (ereg("^2",$this->GetHead("http-state")) && $this->GetHead("content-type") == strtolower($ctype)) {  
  104.             return true;  
  105.         } else { 
  106.             $this->m_error .= "類型不對 ".$this->GetHead("content-type")."<br>"
  107.             return false; 
  108.         } 
  109.     } 
  110.      
  111.     /** 
  112.     * 用 HTTP 協議下載文件 
  113.     */ 
  114.     public function SaveToBin($savefilename) { 
  115.         if (!$this->IsGetOK()) return false; 
  116.         if (@feof($this->m_fp)) {  
  117.             $this->m_error = "連接已經關閉!";  
  118.             return false;  
  119.         } 
  120.         $fp = fopen($savefilename,"w"or die("寫入文件 $savefilename 失敗!"); 
  121.         while (!feof($this->m_fp)) { 
  122.             @fwrite($fp,fgets($this->m_fp,256)); 
  123.         } 
  124.         @fclose($this->m_fp); 
  125.         return true; 
  126.     } 
  127.      
  128.     /** 
  129.     * 保存網頁內容為 Text 文件 
  130.     */ 
  131.     public function SaveToText($savefilename) { 
  132.         if ($this->IsText()) { 
  133.             $this->SaveBinFile($savefilename); 
  134.         } else { 
  135.             return ""
  136.         } 
  137.     } 
  138.      
  139.     /** 
  140.     * 用 HTTP 協議獲得一個網頁的內容 
  141.     */ 
  142.     public function GetHtml() { 
  143.         if (!$this->IsText()) return ""
  144.         if ($this->m_html!=""return $this->m_html; 
  145.         if (!$this->m_fp||@feof($this->m_fp)) return ""
  146.         while(!feof($this->m_fp)) { 
  147.             $this->m_html .= fgets($this->m_fp,256); 
  148.         } 
  149.         @fclose($this->m_fp); 
  150.         return $this->m_html; 
  151.     } 
  152.      
  153.     /** 
  154.     * 開始 HTTP 會話 
  155.     */ 
  156.     public function PrivateStartSession() { 
  157.         if (!$this->PrivateOpenHost()) { 
  158.             $this->m_error .= "打開遠程主機出錯!"
  159.             return false; 
  160.         } 
  161.         if ($this->GetHead("http-edition")=="HTTP/1.1") { 
  162.             $httpv = "HTTP/1.1"
  163.         } else { 
  164.             $httpv = "HTTP/1.0"
  165.         } 
  166.         fputs($this->m_fp,"GET ".$this->m_urlpath." $httpvrn"); 
  167.         fputs($this->m_fp,"Host: ".$this->m_host."rn"); 
  168.         fputs($this->m_fp,"Accept: */*rn"); 
  169.         fputs($this->m_fp,"User-Agent: Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2)rn"); 
  170.         #HTTP1.1協議必須指定文檔結束后關閉鏈接,否則讀取文檔時無法使用feof判斷結束 
  171.         if ($httpv=="HTTP/1.1") { 
  172.             fputs($this->m_fp,"Connection: Closernrn"); 
  173.         } else { 
  174.             fputs($this->m_fp,"rn"); 
  175.         } 
  176.         $httpstas = fgets($this->m_fp,256); 
  177.         $httpstas = split(" ",$httpstas); 
  178.         $this->m_httphead["http-edition"] = trim($httpstas[0]); 
  179.         $this->m_httphead["http-state"] = trim($httpstas[1]); 
  180.         $this->m_httphead["http-describe"] = ""
  181.         for ($i=2;$i<count($httpstas);$i++) { 
  182.             $this->m_httphead["http-describe"] .= " ".trim($httpstas[$i]); 
  183.         } 
  184.         while (!feof($this->m_fp)) { 
  185.             $line = str_replace(""","",trim(fgets($this->m_fp,256))); 
  186.             if($line == ""break
  187.             if (ereg(":",$line)) { 
  188.                 $lines = split(":",$line); 
  189.                 $this->m_httphead[strtolower(trim($lines[0]))] = trim($lines[1]); 
  190.             } 
  191.         } 
  192.     } 
  193.      
  194.     /** 
  195.     * 獲得一個Http頭的值 
  196.     */ 
  197.     public function GetHead($headname) { 
  198.         $headname = strtolower($headname); 
  199.         if (isset($this->m_httphead[$headname])) { 
  200.             return $this->m_httphead[$headname]; 
  201.         } else { 
  202.             return ""
  203.         } 
  204.     } 
  205.      
  206.     /** 
  207.     * 打開連接 
  208.     */ 
  209.     public function PrivateOpenHost() { 
  210.         if ($this->m_host==""return false; 
  211.         $this->m_fp = @fsockopen($this->m_host, $this->m_port, &$errno, &$errstr,10); 
  212.         if (!$this->m_fp){ 
  213.             $this->m_error = $errstr
  214.             return false; 
  215.         } else { 
  216.             return true; 
  217.         } 
  218.     } 
  219.      
  220.     /** 
  221.     * 關閉連接 
  222.     */ 
  223.     public function Close(){ 
  224.         @fclose($this->m_fp); 
  225.     } 
  226.  
  227. #兩種使用方法,分別如下: 
  228.  
  229. #打開網頁 
  230. $httpdown = new HttpDownload(); 
  231. $httpdown->OpenUrl("http://www.google.com.hk"); 
  232. echo $httpdown->GetHtml(); 
  233. $httpdown->Close(); 
  234.  
  235.  
  236. #下載文件 
  237. $file = new HttpDownload(); # 實例化類 
  238. $file->OpenUrl("http://www.49028c.com/cn/lit/an/rust020/rust020.pdf"); # 遠程文件地址 
  239. $file->SaveToBin("rust020.pdf"); # 保存路徑及文件名 
  240. $file->Close(); # 釋放資源 
  241. ?>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
y97精品国产97久久久久久| 最近2019中文字幕大全第二页| 亚洲欧美日韩精品久久奇米色影视| 中文字幕日韩电影| 另类少妇人与禽zozz0性伦| 亚洲成人性视频| 亚洲成人av资源网| 亚洲第一区第二区| 日韩**中文字幕毛片| 亚洲色图综合网| 国产日韩一区在线| 日韩在线观看免费全集电视剧网站| 欧美日韩中文字幕日韩欧美| 亚洲最新av在线| 欧美亚洲国产成人精品| 亚洲国产又黄又爽女人高潮的| 亚州欧美日韩中文视频| 亚洲第一区中文字幕| 日韩免费观看在线观看| 欧美福利在线观看| 久久久精品中文字幕| 中文字幕在线看视频国产欧美| 国产亚洲一级高清| 日韩在线不卡视频| 日韩av在线网页| 亚洲综合中文字幕68页| 日本精品在线视频| 亚洲视频在线视频| 热久久美女精品天天吊色| 2019国产精品自在线拍国产不卡| 北条麻妃一区二区在线观看| 亚洲美女喷白浆| 久久伊人免费视频| 日韩成人在线视频| 日韩美女主播视频| 国产精品自产拍在线观| 国产亚洲精品久久久| 久久精品中文字幕免费mv| 在线看国产精品| 精品日本高清在线播放| 欧美精品激情在线观看| 欧美午夜女人视频在线| 亚洲欧美日韩直播| 麻豆成人在线看| 国产精品扒开腿做爽爽爽视频| 欧美性色视频在线| 在线播放日韩av| 国产69精品久久久久99| 日韩高清免费观看| 欧美专区在线视频| 亚洲视频在线免费看| 亚洲午夜av电影| 91精品久久久久久综合乱菊| 日韩一区二区福利| 亚洲va久久久噜噜噜久久天堂| 国产精品美女午夜av| 亚洲黄在线观看| 亚洲精品999| 久久香蕉国产线看观看av| 欧美高清在线播放| 91av在线免费观看| 日韩人体视频一二区| 人妖精品videosex性欧美| 国产精品午夜一区二区欲梦| 91色p视频在线| 91久久久久久| 午夜精品久久久99热福利| 夜夜嗨av一区二区三区四区| 色99之美女主播在线视频| 日本午夜在线亚洲.国产| 国产91在线播放| 欧美午夜美女看片| 国产日韩在线看| 在线视频日韩精品| 久久亚洲成人精品| 亚洲第一页中文字幕| 日韩欧美在线播放| 精品性高朝久久久久久久| 欧美日韩一区二区精品| 66m—66摸成人免费视频| 日韩欧美成人区| 久久久中精品2020中文| 草民午夜欧美限制a级福利片| 精品久久久久人成| 久久香蕉国产线看观看av| 亚洲欧洲高清在线| 欧美激情视频一区二区三区不卡| 欧美电影在线观看高清| 欧美激情在线观看| 日韩亚洲一区二区| 亚洲视频网站在线观看| 最近2019中文字幕在线高清| 日韩免费av片在线观看| 欧美成人一二三| 中文字幕久热精品在线视频| 国产中文字幕亚洲| 亚洲视频在线观看网站| 国产精品高潮呻吟久久av野狼| 国产成人精品在线观看| 国产一区二区三区视频免费| 日韩激情在线视频| 97视频com| 亚洲a一级视频| 国产91成人video| 欧美天天综合色影久久精品| 国产成人一区二区三区| 亚洲一区二区免费| 亚洲自拍在线观看| 亚洲成人网av| 日韩欧美在线视频观看| 欧美日本高清一区| 成人亚洲激情网| 日本一区二区在线播放| 久久综合电影一区| 91精品国产电影| 欧美裸体男粗大视频在线观看| 国产精品久久久久久久一区探花| 国产美女久久精品香蕉69| 久久在精品线影院精品国产| 亚洲欧美中文字幕在线一区| 热re99久久精品国产66热| 日日狠狠久久偷偷四色综合免费| 国产精品自产拍高潮在线观看| 久久久精品视频成人| 亚洲色图日韩av| 日韩性xxxx爱| 亚洲社区在线观看| 在线色欧美三级视频| 欧美一级淫片videoshd| 亚洲综合精品一区二区| 91精品视频一区| 久久亚洲精品国产亚洲老地址| 亚洲自拍偷拍福利| 色与欲影视天天看综合网| 九九热视频这里只有精品| 97在线精品视频| 国产91露脸中文字幕在线| 亚洲综合成人婷婷小说| 98精品国产高清在线xxxx天堂| 国产91免费看片| 在线播放国产一区二区三区| 亚洲国模精品私拍| 久久久久久伊人| 91最新国产视频| 日韩av电影中文字幕| 色琪琪综合男人的天堂aⅴ视频| 国产精品无码专区在线观看| 欧美一区二区三区精品电影| 欧美国产一区二区三区| 亚洲图片在区色| 国产精品91一区| 国产精品www色诱视频| 成人a免费视频| 亚洲精品一二区| 亚洲老头老太hd| 亚洲欧美变态国产另类| 久久久在线免费观看| 亚洲国产精品高清久久久| 日韩精品中文字幕视频在线| 日韩av大片在线| 一区二区三区国产在线观看| 久久国产精品网站| 日韩欧美在线看| 国产精品av电影|