중단점 이력서 다운로드를 지원하는 PHP 다운로드 원격 파일 클래스

WBOY
풀어 주다: 2016-07-25 08:44:21
원래의
847명이 탐색했습니다.
斷點續傳, PHP

PHP 다운로드 원격 파일 클래스, 중단점 재개 다운로드 지원, 코드에는 특정 호출 지침이 포함되어 있습니다. 프로그램은 주로 HTTP 프로토콜을 사용하여 파일을 다운로드합니다. HTTP1.1 프로토콜은 문서가 끝난 후 링크를 ​​닫아야 함을 지정해야 합니다. 그렇지 않으면 문서를 읽을 때 feof를 사용하여 끝을 판단할 수 없습니다. 자세한 내용은 소스 코드를 다운로드하여 확인하세요.

  1. /**
  2. * 원격 파일 다운로드는 중단점 재개를 지원합니다
  3. */
  4. class HttpDownload {
  5. private $m_url = "";
  6. private $m_urlpath = "";
  7. 개인 $m_scheme = "http";
  8. 개인 $m_host = "";
  9. 개인 $m_port = "80";
  10. 개인 $m_user = "";
  11. 개인 $ m_pass = "";
  12. 비공개 $m_path = "/";
  13. 비공개 $m_query = "";
  14. 비공개 $m_fp = "";
  15. 비공개 $m_error = "";
  16. 비공개 $m_httphead = "" ;
  17. 비공개 $m_html = "";
  18. /**
  19. * 초기화
  20. */
  21. 공개 함수 PrivateInit($url){
  22. $urls = "";
  23. $urls = @parse_url($url);
  24. $this->m_url = $url;
  25. if(is_array($urls)) {
  26. $this->m_host = $urls ["호스트"];
  27. if(!empty($urls["scheme"])) $this->m_scheme = $urls["scheme"];
  28. if(!empty($urls[" user"])) $this->m_user = $urls["user"];
  29. if(!empty($urls["pass"])) $this->m_pass = $urls["pass" ];
  30. if(!empty($urls["port"])) $this->m_port = $urls["port"];
  31. if(!empty($urls["path"]) ) $this->m_path = $urls["path"];
  32. $this->m_urlpath = $this->m_path;
  33. if(!empty($urls["query"])) {
  34. $this->m_query = $urls["query"];
  35. $this->m_urlpath .= "?".$this->m_query;
  36. }
  37. }
  38. }
  39. /**
  40. * 지정된 URL을 엽니다
  41. */
  42. function OpenUrl($url) {
  43. # 重设各参数
  44. $this->m_url = "";
  45. $this->m_urlpath = "";
  46. $this->m_scheme = "http";
  47. $this->m_host = "";
  48. $this->m_port = "80 ";
  49. $this->m_user = "";
  50. $this->m_pass = "";
  51. $this->m_path = "/";
  52. $this-> m_query = "";
  53. $this->m_error = "";
  54. $this->m_httphead = "" ;
  55. $this->m_html = "";
  56. $this- >Close();
  57. #初始化系统
  58. $this->PrivateInit($url);
  59. $this->PrivateStartSession();
  60. }
  61. /* *
  62. * 연산 오류의 원인 파악
  63. */
  64. 공용 함수 printError() {
  65. echo "错误信息:".$this->m_error;
  66. echo "具体返回头:
    ";
  67. foreach($this->m_httphead as $k=>$v) {
  68. echo "$k => $v
    rn";
  69. }
  70. }
  71. /**
  72. * Get 메소드를 사용하여 보낸 헤더의 응답 결과가 올바른지 확인
  73. */
  74. 공개 함수 IsGetOK() {
  75. if( ereg("^2 ",$this->GetHead("http-state")) ) {
  76. return true;
  77. } else {
  78. $this->m_error .= $this->GetHead("http -상태")." - ".$this->GetHead("http-describe")."
    ";
  79. return false;
  80. }
  81. }
  82. /**
  83. * 반환된 웹페이지가 텍스트 유형인지 확인
  84. */
  85. 공용 함수 IsText() {
  86. if (ereg("^2",$this->GetHead("http-state")) && eregi("^text",$this-> GetHead("content-type"))) {
  87. return true;
  88. } else {
  89. $this->m_error .= "内容为無文本类型
    ";
  90. return false;
  91. }
  92. }
  93. /**
  94. * 반환된 웹페이지가 특정 유형인지 확인
  95. */
  96. 공개 함수 IsContentType($ctype) {
  97. if (ereg("^2",$this->GetHead ("http-state")) && $this->GetHead("content-type") == strtolower($ctype)) {
  98. return true
  99. } else {
  100. $this-> ;m_error .= "类型不对 ".$this->GetHead("content-type")."
    ";
  101. return false;
  102. }
  103. }
  104. /**
  105. * HTTP 프로토콜을 사용하여 파일 다운로드
  106. */
  107. 공용 함수 SaveToBin($savefilename) {
  108. if (!$this->IsGetOK()) return false;
  109. if (@feof($this-> m_fp)) {
  110. $this->m_error = "连接已经关闭!"
  111. return false;
  112. }
  113. $fp = fopen($savefilename,"w") 또는 die("写入文件 $savefilename 失败!");
  114. while (!feof($this->m_fp)) {
  115. @fwrite($fp,fgets($this->m_fp,256));
  116. }
  117. @ fclose( $this->m_fp);
  118. return true;
  119. }
  120. /**
  121. * 儲存網頁內容為 Text 檔案
  122. */
  123. public function SaveToText($savefilename) {
  124. if ( $this- >IsText()) {
  125. $this->SaveBinFile($savefilename);
  126. } else {
  127. return "";
  128. }
  129. }
  130. /**
  131. * 用 HTTP 協定取得一個網頁的內容
  132. */
  133. public function GetHtml() {
  134. if (!$this->IsText()) return "";
  135. if ($this->m_html!= "") return $this- >m_html;
  136. if (!$this->m_fp||@feof($this->m_fp)) return "";
  137. while(!feof($this ->m_fp)) {
  138. $ this->m_html .= fgets($this->m_fp,256);
  139. }
  140. @fclose($this->m_fp);
  141. return $this->m_html;
  142. }
  143. }
  144. /**
  145. * 開始 HTTP 會話
  146. */
  147. public function PrivateStartSession() {
  148. if (!$this->PrivateOpenHost() ) {
  149. $this->m_error .= "開啟遠端主機錯誤! ";
  150. } else {
  151. $httpv = "HTTP/1.0";
  152. }
  153. fputs($this->m_fp,"GET ".$this->m_urlpath."$httpvrn") ;
  154. fputs($this->m_fp,"主機:".$this->m_host."rn");
  155. fputs($this->m_fp,"接受:*/*rn");
  156. fputs($this->m_fp,"用戶代理:Mozilla/4.0(相容;MSIE 6.0;Windows NT 5.2)rn");
  157. #HTTP1.1協定必須指定文件結束後關閉鏈接,否則讀取文件時無法使用feof判斷結束
  158. if ($httpv=="HTTP/1.1") {
  159. fputs($this->m_fp,"連接: Closernrn");
  160. } else {
  161. fputs($this->m_fp,"rn");
  162. }
  163. $ httpsstas = fgets($this->m_fp,256);
  164. $httpsstas = split(" ",$httpsstas);
  165. $this->m_httphead["http-edition"] = trim($httpsstas [0]);
  166. $this->m_httphead["http-state"] = trim($httpsstas[1]);
  167. $this->m_httphead["http-describe"] = "" ;
  168. for ($i=2;$i $this->m_httphead[ "http-describe"] .= " ".trim($httpsstas[ $i]);
  169. }
  170. while (!feof($this->m_fp)) {
  171. $line = str_replace(" "","",trim(fgets($this->m_fp) m_fp,256)));
  172. if($line == "") break;
  173. if (ereg(":",$line )) {
  174. $lines = split(":",$ line);
  175. $this->m_httphead[strtolower(trim($lines[0]))] = trim($lines[1]);
  176. }
  177. }
  178. }
  179. /**
  180. * 得到一個Http頭的值
  181. */
  182. public function GetHead($headname) {
  183. $headname = strtolower($headname);
  184. if (isset($this->m_httphead[$headname) ])) {
  185. return $this->m_httphead[$headname];
  186. } else {
  187. return "";
  188. }
  189. }
  190. /**
  191. * 開啟連線
  192. */
  193. public function PrivateOpenHost() {
  194. if ($this->m_host=="") return false;
  195. $this ->m_fp = @fsockopen($this->m_fp; m_host, $this->m_port, &$errno, &$errstr,10);
  196. if (!$this->m_fp){
  197. $this->m_error = $errstr;
  198. return false;
  199. } else {
  200. return true;
  201. }
  202. }
  203. /**
  204. * 關閉連線
  205. */
  206. public function Close(){
  207. @ fclose($ this->m_fp);
  208. }
  209. }
  210. # 兩種使用方法,分別如下:
  211. #開啟網頁
  212. $httpdown = new HttpDownload ();
  213. $httpdown->OpenUrl("http://www.google.com.hk");
  214. echo $httpdown->GetHtml();
  215. $httpdown->關閉();
  216. #下載檔案
  217. $file = new HttpDownload(); # 實例化類別
  218. $file->OpenUrl("http://www.ti.com.cn/cn/lit/an/rust020/rust020.pdf"); # 遠端檔案位址
  219. $file->SaveToBin("rust020.pdf"); # 儲存路徑及檔名
  220. $file->Close(); # 釋放資源
  221. ?>
  222. 複製程式碼

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿