PHPのダウンロードとリモート画像取得機能(ソースは偽造可能)

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