ホームページ  >  記事  >  バックエンド開発  >  PHPダウンロードリモート画像関数例(偽ソース)

PHPダウンロードリモート画像関数例(偽ソース)

WBOY
WBOYオリジナル
2016-07-25 08:53:05948ブラウズ
  1. /**
  2. * @機能: リモート写真をダウンロード
  3. * @bbs.it-home.org
  4. */
  5. function DownImageKeep($gurl, $rfurl, $filename, $gcookie="", $JumpCount=0, $maxtime=30)
  6. {
  7. $urlinfos = GetHostInfo($gurl);
  8. $ghost = トリム($urlinfos['host']);
  9. if($ghost=='')
  10. {
  11. FALSE を返す;
  12. }
  13. $gquery = $urlinfos['query'];
  14. if($gcookie=="" && !empty($rfurl))
  15. {
  16. $gcookie = RefurlCookie($rfurl);
  17. }
  18. $sessionQuery = "GET $gquery HTTP/1.1rn";
  19. $sessionQuery .= "ホスト: $ghostrn";
  20. $sessionQuery .= "リファラー: $rfurlrn";
  21. $sessionQuery .= "受け入れる: */*rn";
  22. $sessionQuery .= "ユーザーエージェント: Mozilla/4.0 (互換性; MSIE 5.00; Windows 98)rn";
  23. if($gcookie!="" && !preg_match("/[rn]/", $gcookie))
  24. {
  25. $sessionQuery .= $gcookie."rn";
  26. }
  27. $sessionQuery .= "接続: Keep-Alivernrn";
  28. $errno = "";
  29. $errstr = "";
  30. $m_fp = fsockopen($ghost, 80, $errno, $errstr,10);
  31. fwrite($m_fp,$sessionQuery);
  32. $lnum = 0;
  33. //获取详细应答头
  34. $m_httphead = Array();
  35. $httpstas =explode(" ",fgets($m_fp,256));
  36. $m_httphead["http-edition"] = トリム($httpstas[0]);
  37. $m_httphead["http-state"] = トリム($httpstas[1]);
  38. while(!feof($m_fp))
  39. {
  40. $line = トリム(fgets($m_fp,256));
  41. if($line == "" || $lnum>100)
  42. {
  43. ブレーク;
  44. }
  45. $hkey = "";
  46. $hvalue = "";
  47. $v = 0;
  48. for($i=0; $i {
  49. if($v==1)
  50. {
  51. $hvalue .= $line[$i];
  52. }
  53. if($line[$i]==":")
  54. {
  55. $v = 1;
  56. }
  57. if($v==0)
  58. {
  59. $hkey .= $line[$i];
  60. }
  61. }
  62. $hkey = トリム($hkey);
  63. if($hkey!="")
  64. {
  65. $m_httphead[strto lower($hkey)] = トリム($hvalue);
  66. }
  67. }
  68. //分析返し记录
  69. if(preg_match("/^3/", $m_httphead["http-state"]))
  70. {
  71. if(isset($m_httphead["location"]) && $JumpCount<3)
  72. {
  73. $JumpCount++;
  74. DownImageKeep($gurl,$rfurl,$filename,$gcookie,$JumpCount);
  75. }
  76. else
  77. {
  78. FALSE を返す;
  79. }
  80. }
  81. if(!preg_match("/^2/", $m_httphead["http-state"]))
  82. {
  83. return FALSE;
  84. }
  85. if(!isset($m_httphead))
  86. {
  87. return FALSE;
  88. }
  89. $contentLength = $m_httphead['content-length'];
  90. //保存文例
  91. $fp = fopen($filename,"w") or die("写入文例:{$filename} 失败!");
  92. $i=0;
  93. $okdata = "";
  94. $starttime = time();
  95. while(!feof($m_fp))
  96. {
  97. $okdata .= fgetc($m_fp);
  98. $i++ ;
  99. //超時間结束
  100. if(time()-$starttime>$maxtime)
  101. {
  102. Break; }
  103. //到达指定大小结束
  104. if($i >= $contentLength)
  105. {
  106. Break ;
  107. }
  108. }
  109. if($okdata!="")
  110. {
  111. fwrite($fp,$okdata);
  112. fclose($fp)
  113. {
  114. @ unlink($filename);
  115. fclose($m_fp);
  116. fclose($m_fp);
  117. /**
  118. * ページから返された Cookie 情報を取得します
  119. *
  120. * @access public
  121. * @param string $gurl アドレスを調整します
  122. * @return string
  123. */
  124. 関数 RefurlCookie($gurl) {
  125. グローバル $gcookie,$lastRfurl;
  126. $gurl = トリム($gurl);
  127. if(!empty($gcookie) && $lastRfurl==$gurl)
  128. {
  129. return $gcookie }
  130. else
  131. $lastRfurl=$gurl;
  132. if(trim($gurl)=='')
  133. {
  134. return '';
  135. $ghost = $urlinfos['host' ];
  136. $gquery = $urlinfos['クエリ'];
  137. $sessionQuery = "GET $gquery HTTP/1.1rn";
  138. $sessionQuery .= "ホスト: $ghostrn";
  139. $sessionQuery .= "受け入れる: */*rn";
  140. $sessionQuery .= "ユーザーエージェント: Mozilla/4.0 (互換性; MSIE 5.00; Windows 98)rn";
  141. $sessionQuery .= "接続: Closernrn";
  142. $errno = "";
  143. $errstr = "";
  144. $m_fp = fsockopen($ghost, 80, $errno, $errstr,10) または die($ghost.'
    ');
  145. fwrite($m_fp,$sessionQuery);
  146. $lnum = 0;
  147. //获取详细应答头
  148. $gcookie = "";
  149. while(!feof($m_fp))
  150. {
  151. $line = トリム(fgets($m_fp,256));
  152. if($line == "" || $lnum>100)
  153. {
  154. ブレーク;
  155. }
  156. else
  157. {
  158. if(preg_match("/^cookie/i", $line))
  159. {
  160. $gcookie = $line;
  161. 休憩;
  162. }
  163. }
  164. }
  165. fclose($m_fp);
  166. $gcookie を返します。
  167. }
  168. /**
  169. * URL のホスト部分とクエリ部分を取得します
  170. *
  171. * @access public
  172. * @param string $gurl アドレスを調整します
  173. * @return string
  174. */
  175. function GetHostInfo($gurl)
  176. {
  177. $gurl = preg_replace("/^http:///i", "", trim($gurl));
  178. $garr['host'] = preg_replace("//(.*)$/i", "", $gurl);
  179. $garr['query'] = "/".preg_replace("/^([^/]*)//i", "", $gurl);
  180. $garr を返します。
  181. }
  182. ?>
  183. 复制代
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。