PHP實現下載遠程檔案類相關代碼

來源:互聯網
上載者:User
本文主要和大家介紹了PHP實現的下載遠程檔案類定義與用法,結合具體執行個體形式分析了php封裝的下載遠程檔案操作類定義及使用方法,需要的朋友可以參考下,希望能協助到大家。


<?php/** * 下載遠程檔案類支援斷點續傳 */class HttpDownload {  private $m_url = "";  private $m_urlpath = "";  private $m_scheme = "http";  private $m_host = "";  private $m_port = "80";  private $m_user = "";  private $m_pass = "";  private $m_path = "/";  private $m_query = "";  private $m_fp = "";  private $m_error = "";  private $m_httphead = "" ;  private $m_html = "";  /**   * 初始化   */  public function PrivateInit($url){    $urls = "";    $urls = @parse_url($url);    $this->m_url = $url;    if(is_array($urls)) {      $this->m_host = $urls["host"];      if(!empty($urls["scheme"])) $this->m_scheme = $urls["scheme"];      if(!empty($urls["user"])) $this->m_user = $urls["user"];      if(!empty($urls["pass"])) $this->m_pass = $urls["pass"];      if(!empty($urls["port"])) $this->m_port = $urls["port"];      if(!empty($urls["path"])) $this->m_path = $urls["path"];      $this->m_urlpath = $this->m_path;      if(!empty($urls["query"])) {        $this->m_query = $urls["query"];        $this->m_urlpath .= "?".$this->m_query;      }    }  }  /**  * 開啟指定網址  */  function OpenUrl($url) {    #重設各參數    $this->m_url = "";    $this->m_urlpath = "";    $this->m_scheme = "http";    $this->m_host = "";    $this->m_port = "80";    $this->m_user = "";    $this->m_pass = "";    $this->m_path = "/";    $this->m_query = "";    $this->m_error = "";    $this->m_httphead = "" ;    $this->m_html = "";    $this->Close();    #初始化系統    $this->PrivateInit($url);    $this->PrivateStartSession();  }  /**  * 獲得某操作錯誤的原因  */  public function printError() {    echo "錯誤資訊:".$this->m_error;    echo "具體返回頭:<br>";    foreach($this->m_httphead as $k=>$v) {      echo "$k => $v <br>\r\n";    }  }  /**  * 判別用Get方法發送的頭的應答結果是否正確  */  public function IsGetOK() {    if( ereg("^2",$this->GetHead("http-state")) ) {      return true;    } else {      $this->m_error .= $this->GetHead("http-state")." - ".$this->GetHead("http-describe")."<br>";      return false;    }  }  /**  * 看看返回的網頁是否是text類型  */  public function IsText() {    if (ereg("^2",$this->GetHead("http-state")) && eregi("^text",$this->GetHead("content-type"))) {      return true;    } else {      $this->m_error .= "內容為非文本類型<br>";      return false;    }  }  /**  * 判斷返回的網頁是否是特定的類型  */  public function IsContentType($ctype) {    if (ereg("^2",$this->GetHead("http-state")) && $this->GetHead("content-type") == strtolower($ctype)) {      return true;    } else {      $this->m_error .= "類型不對 ".$this->GetHead("content-type")."<br>";      return false;    }  }  /**  * 用 HTTP 協議下載檔案  */  public function SaveToBin($savefilename) {    if (!$this->IsGetOK()) return false;    if (@feof($this->m_fp)) {      $this->m_error = "串連已經關閉!";      return false;    }    $fp = fopen($savefilename,"w") or die("寫入檔案 $savefilename 失敗!");    while (!feof($this->m_fp)) {      @fwrite($fp,fgets($this->m_fp,256));    }    @fclose($this->m_fp);    return true;  }  /**  * 儲存網頁內容為 Text 檔案  */  public function SaveToText($savefilename) {    if ($this->IsText()) {      $this->SaveBinFile($savefilename);    } else {      return "";    }  }  /**  * 用 HTTP 協議獲得一個網頁的內容  */  public function GetHtml() {    if (!$this->IsText()) return "";    if ($this->m_html!="") return $this->m_html;    if (!$this->m_fp||@feof($this->m_fp)) return "";    while(!feof($this->m_fp)) {      $this->m_html .= fgets($this->m_fp,256);    }    @fclose($this->m_fp);    return $this->m_html;  }  /**  * 開始 HTTP 會話  */  public function PrivateStartSession() {    if (!$this->PrivateOpenHost()) {      $this->m_error .= "開啟遠程主機出錯!";      return false;    }    if ($this->GetHead("http-edition")=="HTTP/1.1") {      $httpv = "HTTP/1.1";    } else {      $httpv = "HTTP/1.0";    }    fputs($this->m_fp,"GET ".$this->m_urlpath." $httpv\r\n");    fputs($this->m_fp,"Host: ".$this->m_host."\r\n");    fputs($this->m_fp,"Accept: */*\r\n");    fputs($this->m_fp,"User-Agent: Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2)\r\n");    #HTTP1.1協議必須指定文檔結束後關閉連結,否則讀取文檔時無法使用feof判斷結束    if ($httpv=="HTTP/1.1") {      fputs($this->m_fp,"Connection: Close\r\n\r\n");    } else {      fputs($this->m_fp,"\r\n");    }    $httpstas = fgets($this->m_fp,256);    $httpstas = split(" ",$httpstas);    $this->m_httphead["http-edition"] = trim($httpstas[0]);    $this->m_httphead["http-state"] = trim($httpstas[1]);    $this->m_httphead["http-describe"] = "";    for ($i=2;$i<count($httpstas);$i++) {      $this->m_httphead["http-describe"] .= " ".trim($httpstas[$i]);    }    while (!feof($this->m_fp)) {      $line = str_replace("\"","",trim(fgets($this->m_fp,256)));      if($line == "") break;      if (ereg(":",$line)) {        $lines = split(":",$line);        $this->m_httphead[strtolower(trim($lines[0]))] = trim($lines[1]);      }    }  }  /**  * 獲得一個Http頭的值  */  public function GetHead($headname) {    $headname = strtolower($headname);    if (isset($this->m_httphead[$headname])) {      return $this->m_httphead[$headname];    } else {      return "";    }  }  /**  * 開啟串連  */  public function PrivateOpenHost() {    if ($this->m_host=="") return false;    $this->m_fp = @fsockopen($this->m_host, $this->m_port, &$errno, &$errstr,10);    if (!$this->m_fp){      $this->m_error = $errstr;      return false;    } else {      return true;    }  }  /**  * 關閉串連  */  public function Close(){    @fclose($this->m_fp);  }}#兩種使用方法,分別如下:#開啟網頁$httpdown = new HttpDownload();$httpdown->OpenUrl("http://www.google.com.hk");echo $httpdown->GetHtml();$httpdown->Close();#下載檔案$file = new HttpDownload(); # 執行個體化類$file->OpenUrl("http://www.ti.com.cn/cn/lit/an/rust020/rust020.pdf"); # 遠程檔案地址$file->SaveToBin("rust020.pdf"); # 儲存路徑及檔案名稱$file->Close(); # 釋放資源?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.