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

首頁 > 開發 > PHP > 正文

摘自織夢CMS的HTTP文件下載類

2024-05-04 23:38:38
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了摘自織夢CMS的HTTP文件下載類,涉及php發送http請求、響應、傳輸等常用操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了摘自織夢CMS的HTTP文件下載類。分享給大家供大家參考。具體如下:

 

 
  1. <?php if(!defined('DEDEINC')) exit("Request Error!"); 
  2. /** 
  3. * 織夢HTTP下載類 
  4. * 
  5. * @version $Id: dedehttpdown.class.php 1 11:42 2010年7月6日Z tianya $ 
  6. * @package DedeCMS.Libraries 
  7. * @copyright Copyright (c) 2007 - 2010, DesDev, Inc. 
  8. * @license http://help.dedecms.com/usersguide/license.html 
  9. * @link http://www.dedecms.com 
  10. */ 
  11. @set_time_limit(0); 
  12. class DedeHttpDown 
  13. var $m_url = ''
  14. var $m_urlpath = ''
  15. var $m_scheme = 'http'
  16. var $m_host = ''
  17. var $m_port = '80'
  18. var $m_user = ''
  19. var $m_pass = ''
  20. var $m_path = '/'
  21. var $m_query = ''
  22. var $m_fp = ''
  23. var $m_error = ''
  24. var $m_httphead = ''
  25. var $m_html = ''
  26. var $m_puthead = ''
  27. var $BaseUrlPath = ''
  28. var $HomeUrl = ''
  29. var $reTry = 0; 
  30. var $JumpCount = 0; 
  31. /** 
  32. * 初始化系統 
  33. * 
  34. * @access public 
  35. * @param string $url 需要下載的地址 
  36. * @return string 
  37. */ 
  38. function PrivateInit($url
  39. if($url=='') { 
  40. return ; 
  41. $urls = ''
  42. $urls = @parse_url($url); 
  43. $this->m_url = $url
  44. if(is_array($urls)) 
  45. $this->m_host = $urls["host"]; 
  46. if(!emptyempty($urls["scheme"])) 
  47. $this->m_scheme = $urls["scheme"]; 
  48. if(!emptyempty($urls["user"])) 
  49. $this->m_user = $urls["user"]; 
  50. if(!emptyempty($urls["pass"])) 
  51. $this->m_pass = $urls["pass"]; 
  52. if(!emptyempty($urls["port"])) 
  53. $this->m_port = $urls["port"]; 
  54. if(!emptyempty($urls["path"])) 
  55. $this->m_path = $urls["path"]; 
  56. $this->m_urlpath = $this->m_path; 
  57. if(!emptyempty($urls["query"])) 
  58. $this->m_query = $urls["query"]; 
  59. $this->m_urlpath .= "?".$this->m_query; 
  60. $this->HomeUrl = $urls["host"]; 
  61. $this->BaseUrlPath = $this->HomeUrl.$urls["path"]; 
  62. $this->BaseUrlPath = preg_replace("///([^//]*)/.(.*)$/","/",$this->BaseUrlPath); 
  63. $this->BaseUrlPath = preg_replace("///$/","",$this->BaseUrlPath); 
  64. /** 
  65. * 重設各參數 
  66. * 
  67. * @access public 
  68. * @return void 
  69. */ 
  70. function ResetAny() 
  71. $this->m_url = ""
  72. $this->m_urlpath = ""
  73. $this->m_scheme = "http"
  74. $this->m_host = ""
  75. $this->m_port = "80"
  76. $this->m_user = ""
  77. $this->m_pass = ""
  78. $this->m_path = "/"
  79. $this->m_query = ""
  80. $this->m_error = ""
  81. /** 
  82. * 打開指定網址 
  83. * 
  84. * @access public 
  85. * @param string $url 地址 
  86. * @param string $requestType 請求類型 
  87. * @return string 
  88. */ 
  89. function OpenUrl($url,$requestType="GET"
  90. $this->ResetAny(); 
  91. $this->JumpCount = 0; 
  92. $this->m_httphead = Array() ; 
  93. $this->m_html = ''
  94. $this->reTry = 0; 
  95. $this->Close(); 
  96. //初始化系統 
  97. $this->PrivateInit($url); 
  98. $this->PrivateStartSession($requestType); 
  99. /** 
  100. * 轉到303重定向網址 
  101. * 
  102. * @access public 
  103. * @param string $url 地址 
  104. * @return string 
  105. */ 
  106. function JumpOpenUrl($url
  107. $this->ResetAny(); 
  108. $this->JumpCount++; 
  109. $this->m_httphead = Array() ; 
  110. $this->m_html = ""
  111. $this->Close(); 
  112. //初始化系統 
  113. $this->PrivateInit($url); 
  114. $this->PrivateStartSession('GET'); 
  115. /** 
  116. * 獲得某操作錯誤的原因 
  117. * 
  118. * @access public 
  119. * @return void 
  120. */ 
  121. function printError() 
  122. echo "錯誤信息:".$this->m_error; 
  123. echo "<br/>具體返回頭:<br/>"
  124. foreach($this->m_httphead as $k=>$v){ echo "$k => $v <br/>/r/n"; } 
  125. /** 
  126. * 判別用Get方法發送的頭的應答結果是否正確 
  127. * 
  128. * @access public 
  129. * @return bool 
  130. */ 
  131. function IsGetOK() 
  132. if( preg_match("/^2/",$this->GetHead("http-state")) ) 
  133. return TRUE; 
  134. else 
  135. $this->m_error .= $this->GetHead("http-state")." - ".$this->GetHead("http-describe")."<br/>"
  136. return FALSE; 
  137. /** 
  138. * 看看返回的網頁是否是text類型 
  139. * 
  140. * @access public 
  141. * @return bool 
  142. */ 
  143. function IsText() 
  144. if( preg_match("/^2/",$this->GetHead("http-state")) && preg_match("/text|xml/i",$this->GetHead("content-type")) ) 
  145. return TRUE; 
  146. else 
  147. $this->m_error .= "內容為非文本類型或網址重定向<br/>"
  148. return FALSE; 
  149. /** 
  150. * 判斷返回的網頁是否是特定的類型 
  151. * 
  152. * @access public 
  153. * @param string $ctype 內容類型 
  154. * @return string 
  155. */ 
  156. function IsContentType($ctype
  157. if(preg_match("/^2/",$this->GetHead("http-state")) 
  158. && $this->GetHead("content-type")==strtolower($ctype)) 
  159. return TRUE; } 
  160. else 
  161. $this->m_error .= "類型不對 ".$this->GetHead("content-type")."<br/>"
  162. return FALSE; 
  163. /** 
  164. * 用Http協議下載文件 
  165. * 
  166. * @access public 
  167. * @param string $savefilename 保存文件名稱 
  168. * @return string 
  169. */ 
  170. function SaveToBin($savefilename
  171. if(!$this->IsGetOK()) 
  172. return FALSE; 
  173. if(@feof($this->m_fp)) 
  174. $this->m_error = "連接已經關閉!"return FALSE; 
  175. $fp = fopen($savefilename,"w"); 
  176. while(!feof($this->m_fp)) 
  177. fwrite($fpfread($this->m_fp, 1024)); 
  178. fclose($this->m_fp); 
  179. fclose($fp); 
  180. return TRUE; 
  181. /** 
  182. * 保存網頁內容為Text文件 
  183. * 
  184. * @access public 
  185. * @param string $savefilename 保存文件名稱 
  186. * @return string 
  187. */ 
  188. function SaveToText($savefilename
  189. if($this->IsText()) 
  190. $this->SaveBinFile($savefilename); 
  191. else 
  192. return ""
  193. /** 
  194. * 用Http協議獲得一個網頁的內容 
  195. * 
  196. * @access public 
  197. * @return string 
  198. */ 
  199. function GetHtml() 
  200. if(!$this->IsText()) 
  201. return ''
  202. if($this->m_html!=''
  203. return $this->m_html; 
  204. if(!$this->m_fp||@feof($this->m_fp)) 
  205. return ''
  206. while(!feof($this->m_fp)) 
  207. $this->m_html .= fgets($this->m_fp,256); 
  208. @fclose($this->m_fp); 
  209. return $this->m_html; 
  210. /** 
  211. * 開始HTTP會話 
  212. * 
  213. * @access public 
  214. * @param string $requestType 請求類型 
  215. * @return string 
  216. */ 
  217. function PrivateStartSession($requestType="GET"
  218. if(!$this->PrivateOpenHost()) 
  219. $this->m_error .= "打開遠程主機出錯!"
  220. return FALSE; 
  221. $this->reTry++; 
  222. if($this->GetHead("http-edition")=="HTTP/1.1"
  223. $httpv = "HTTP/1.1"
  224. else 
  225. $httpv = "HTTP/1.0"
  226. $ps = explode('?',$this->m_urlpath); 
  227. $headString = ''
  228. //發送固定的起始請求頭GET、Host信息 
  229. if($requestType=="GET"
  230. $headString .= "GET ".$this->m_urlpath." $httpv/r/n"
  231. else 
  232. $headString .= "POST ".$ps[0]." $httpv/r/n"
  233. $this->m_puthead["Host"] = $this->m_host; 
  234. //發送用戶自定義的請求頭 
  235. if(!isset($this->m_puthead["Accept"])) 
  236. $this->m_puthead["Accept"] = "*/*"
  237. if(!isset($this->m_puthead["User-Agent"])) 
  238. $this->m_puthead["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2)"
  239. if(!isset($this->m_puthead["Refer"])) 
  240. $this->m_puthead["Refer"] = "http://".$this->m_puthead["Host"]; 
  241. foreach($this->m_puthead as $k=>$v
  242. $k = trim($k); 
  243. $v = trim($v); 
  244. if($k!=""&&$v!=""
  245. $headString .= "$k: $v/r/n"
  246. fputs($this->m_fp, $headString); 
  247. if($requestType=="POST"
  248. $postdata = ""
  249. if(count($ps)>1) 
  250. for($i=1;$i<count($ps);$i++) 
  251. $postdata .= $ps[$i]; 
  252. else 
  253. $postdata = "OK"
  254. $plen = strlen($postdata); 
  255. fputs($this->m_fp,"Content-Type: application/x-www-form-urlencoded/r/n"); 
  256. fputs($this->m_fp,"Content-Length: $plen/r/n"); 
  257. //發送固定的結束請求頭 
  258. //HTTP1.1協議必須指定文檔結束后關閉鏈接,否則讀取文檔時無法使用feof判斷結束 
  259. if($httpv=="HTTP/1.1"
  260. fputs($this->m_fp,"Connection: Close/r/n/r/n"); 
  261. else 
  262. fputs($this->m_fp,"/r/n"); 
  263. if($requestType=="POST"
  264. fputs($this->m_fp,$postdata); 
  265. //獲取應答頭狀態信息 
  266. $httpstas = explode(" ",fgets($this->m_fp,256)); 
  267. $this->m_httphead["http-edition"] = trim($httpstas[0]); 
  268. $this->m_httphead["http-state"] = trim($httpstas[1]); 
  269. $this->m_httphead["http-describe"] = ""
  270. for($i=2;$i<count($httpstas);$i++) 
  271. $this->m_httphead["http-describe"] .= " ".trim($httpstas[$i]); 
  272. //獲取詳細應答頭 
  273. while(!feof($this->m_fp)) 
  274. $line = trim(fgets($this->m_fp,256)); 
  275. if($line == ""
  276. break
  277. $hkey = ""
  278. $hvalue = ""
  279. $v = 0; 
  280. for($i=0;$i<strlen($line);$i++) 
  281. if($v==1) 
  282. $hvalue .= $line[$i]; 
  283. if($line[$i]==":"
  284. $v = 1; 
  285. if($v==0) 
  286. $hkey .= $line[$i]; 
  287. $hkey = trim($hkey); 
  288. if($hkey!=""
  289. $this->m_httphead[strtolower($hkey)] = trim($hvalue); 
  290. //如果連接被不正常關閉,重試 
  291. if(feof($this->m_fp)) 
  292. if($this->reTry > 10) 
  293. return FALSE; 
  294. $this->PrivateStartSession($requestType); 
  295. //判斷是否是3xx開頭的應答 
  296. if(preg_match("/^3/",$this->m_httphead["http-state"])) 
  297. if($this->JumpCount > 3) 
  298. return
  299. if(isset($this->m_httphead["location"])) 
  300. $newurl = $this->m_httphead["location"]; 
  301. if(preg_match("/^http/i",$newurl)) 
  302. $this->JumpOpenUrl($newurl); 
  303. else 
  304. $newurl = $this->FillUrl($newurl); 
  305. $this->JumpOpenUrl($newurl); 
  306. else 
  307. $this->m_error = "無法識別的答復!"
  308. /** 
  309. * 獲得一個Http頭的值 
  310. * @access public 
  311. * @param string $headname 頭文件名稱 
  312. * @return string 
  313. */ 
  314. function GetHead($headname
  315. $headname = strtolower($headname); 
  316. return isset($this->m_httphead[$headname]) ? $this->m_httphead[$headname] : ''
  317. /** 
  318. * 設置Http頭的值 
  319. * 
  320. * @access public 
  321. * @param string $skey 鍵 
  322. * @param string $svalue 值 
  323. * @return string 
  324. */ 
  325. function SetHead($skey,$svalue
  326. $this->m_puthead[$skey] = $svalue
  327. /** 
  328. * 打開連接 
  329. * 
  330. * @access public 
  331. * @return bool 
  332. */ 
  333. function PrivateOpenHost() 
  334. if($this->m_host==""
  335. return FALSE; 
  336. $errno = ""
  337. $errstr = ""
  338. $this->m_fp = @fsockopen($this->m_host, $this->m_port, $errno$errstr,10); 
  339. if(!$this->m_fp) 
  340. $this->m_error = $errstr
  341. return FALSE; 
  342. else 
  343. return TRUE; 
  344. /** 
  345. * 關閉連接 
  346. * 
  347. * @access public 
  348. * @return void 
  349. */ 
  350. function Close() 
  351. @fclose($this->m_fp); 
  352. /** 
  353. * 補全相對網址 
  354. * 
  355. * @access public 
  356. * @param string $surl 需要不全的地址 
  357. * @return string 
  358. */ 
  359. function FillUrl($surl
  360. $i = 0; 
  361. $dstr = ""
  362. $pstr = ""
  363. $okurl = ""
  364. $pathStep = 0; 
  365. $surl = trim($surl); 
  366. if($surl==""
  367. return ""
  368. $pos = strpos($surl,"#"); 
  369. if($pos>0) 
  370. $surl = substr($surl,0,$pos); 
  371. if($surl[0]=="/"
  372. $okurl = "http://".$this->HomeUrl.$surl
  373. else if($surl[0]=="."
  374. if(strlen($surl)<=1) 
  375. return ""
  376. else if($surl[1]=="/"
  377. $okurl = "http://".$this->BaseUrlPath."/".substr($surl,2,strlen($surl)-2); 
  378. else 
  379. $urls = explode("/",$surl); 
  380. foreach($urls as $u
  381. if($u==".."
  382. $pathStep++; 
  383. else if($i<count($urls)-1) 
  384. $dstr .= $urls[$i]."/"
  385. else 
  386. $dstr .= $urls[$i]; 
  387. $i++; 
  388. $urls = explode("/",$this->BaseUrlPath); 
  389. if(count($urls) <= $pathStep
  390. return ""
  391. else 
  392. $pstr = "http://"
  393. for($i=0;$i<count($urls)-$pathStep;$i++) 
  394. $pstr .= $urls[$i]."/"
  395. $okurl = $pstr.$dstr
  396. else 
  397. if(strlen($surl)<7) 
  398. $okurl = "http://".$this->BaseUrlPath."/".$surl
  399. else if(strtolower(substr($surl,0,7))=="http://"
  400. $okurl = $surl
  401. else 
  402. $okurl = "http://".$this->BaseUrlPath."/".$surl
  403. $okurl = preg_replace("/^(http:////)/i","",$okurl); 
  404. $okurl = preg_replace("///{1,}/""/"$okurl); 
  405. return "http://".$okurl
  406. }//End Class 

希望本文所述對大家的php程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
浅井舞香一区二区| 69**夜色精品国产69乱| 国产欧美精品一区二区三区-老狼| 国模精品视频一区二区三区| 日韩免费在线视频| 亚洲精品自拍第一页| 亚洲图片制服诱惑| 国产精品成久久久久三级| 91久久精品国产| 欧美性生交xxxxxdddd| 成人444kkkk在线观看| 国产精品av在线| 亚洲天堂日韩电影| 久久久久久久影院| 日韩大胆人体377p| 久久中文字幕在线视频| 国内精品免费午夜毛片| 38少妇精品导航| 色悠悠国产精品| 国产小视频国产精品| 国产盗摄xxxx视频xxx69| 成人黄色午夜影院| 精品国产依人香蕉在线精品| 日韩在线www| 国产精品三级久久久久久电影| 国产欧美一区二区三区视频| 亚洲免费小视频| 久久久国产精品亚洲一区| 日本精品视频在线播放| 91久久久久久久久久| 久久久精品在线观看| 国产成人综合精品| 日韩在线www| 国产精品久久久久久久久免费看| 欧美性xxxxxxxxx| 欧美精品激情blacked18| 精品国产一区二区三区久久久狼| 精品视频在线导航| 国产精品中文字幕在线观看| 欧美极品少妇全裸体| 81精品国产乱码久久久久久| 国产精品第七十二页| 久久精品视频在线| 97超碰国产精品女人人人爽| 91中文字幕一区| 91久久夜色精品国产网站| 国产精品91一区| 成人黄色网免费| 92裸体在线视频网站| 91精品久久久久久久久中文字幕| 亚洲成av人乱码色午夜| 欧美中文在线视频| 国产精品久久久久久久久久久久| 亚洲欧美日韩精品| 欧美另类极品videosbestfree| 亚洲**2019国产| 97人人做人人爱| 日韩视频第一页| 欧美亚洲伦理www| 2021久久精品国产99国产精品| 国产精品电影观看| 成人啪啪免费看| 最近中文字幕日韩精品| 日韩精品免费综合视频在线播放| 亚洲**2019国产| 日韩在线观看免费av| 欧美黄色www| 精品人伦一区二区三区蜜桃网站| 久久久久国产精品www| 日韩中文字幕免费| 国产99视频在线观看| 日韩亚洲精品电影| 神马久久桃色视频| 97久久久久久| 国产成人亚洲综合| 狠狠躁夜夜躁人人躁婷婷91| 尤物九九久久国产精品的分类| 大伊人狠狠躁夜夜躁av一区| 国产精品日日摸夜夜添夜夜av| 精品少妇一区二区30p| 91精品国产高清久久久久久91| 欧美激情在线观看| 免费av在线一区| 亚洲精品电影在线| 亚洲国产精久久久久久久| 精品中文字幕视频| 亚洲欧美精品中文字幕在线| 久久亚洲影音av资源网| 91欧美精品午夜性色福利在线| 中文字幕亚洲欧美日韩在线不卡| 亚洲激情视频网站| 久久久精品网站| 欧美亚洲一级片| 久久成人av网站| 久久伊人精品天天| 97不卡在线视频| 57pao成人永久免费视频| 色哟哟网站入口亚洲精品| 欧美福利视频网站| 亚洲国产精品99久久| 91国内免费在线视频| 亚洲专区国产精品| 欧美大人香蕉在线| 亚洲欧美国内爽妇网| 中文字幕欧美日韩在线| 国产日韩欧美黄色| 亚洲剧情一区二区| 中文字幕日韩在线播放| 成人av在线网址| 国产一区二区三区欧美| 国内精品久久久久久| 懂色av一区二区三区| 亚洲午夜女主播在线直播| 久久久久久久久久亚洲| 久久久亚洲国产天美传媒修理工| 亚洲xxx大片| 伊人男人综合视频网| 国产欧美在线视频| 亚洲天堂av在线免费观看| 欧美大片在线影院| 国产婷婷色综合av蜜臀av| 亚洲精品久久7777777| 国产精品99久久99久久久二8| 日韩av资源在线播放| 91精品久久久久| 欧美激情一区二区三区在线视频观看| 国产精品久久77777| www.欧美精品| 成人在线激情视频| 久久99精品国产99久久6尤物| 亚洲视频在线观看网站| 国产亚洲视频在线观看| 少妇久久久久久| 欧美一级大片在线免费观看| 成人福利网站在线观看11| 国产精品美女视频网站| 国产日韩欧美在线播放| 亚洲人成人99网站| 一本色道久久88精品综合| 成人综合网网址| 欧美日韩中文字幕综合视频| 精品动漫一区二区三区| 久久久999精品| 中文字幕国产日韩| 国产精国产精品| 国产成人精品最新| 亚洲欧美日韩视频一区| 国产视频精品免费播放| 久久99久久久久久久噜噜| 富二代精品短视频| 国产精品久久在线观看| 91在线观看免费高清完整版在线观看| 亚洲一区二区三区四区在线播放| 欧美性猛交xxxx免费看久久久| 精品自拍视频在线观看| 另类专区欧美制服同性| 成人日韩在线电影| 亚洲女人天堂成人av在线| 亚洲一区二区福利| 伊人亚洲福利一区二区三区| 欧美激情a∨在线视频播放| 91免费看国产| 国产91热爆ts人妖在线| 国产日韩欧美视频|