PHP 다운로드 및 원격 이미지 획득 기능(원본은 위조 가능)

WBOY
풀어 주다: 2016-07-25 08:54:27
원래의
938명이 탐색했습니다.
  1. //下载获取远程图 Images
  2. 함수 DownImageKeep($gurl, $rfurl, $filename, $gcookie="", $ JumpCount=0, $maxtime=30)
  3. {
  4. $urlinfos = GetHostInfo($gurl);
  5. $ghost = 트림($urlinfos['host']);
  6. if($ghost=='')
  7. {
  8. return FALSE;
  9. }
  10. $gquery = $urlinfos['query'];
  11. if($gcookie=="" && !empty($rfurl))
  12. {
  13. $gcookie = RefurlCookie($rfurl);
  14. }
  15. $sessionQuery = "$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 = 폭발(" ",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 = Trim(fgets($m_fp,256));
  38. if($line == "" || $lnum>100)
  39. {
  40. break;
  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[strtolower($hkey)] = Trim($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") 또는 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; $okdata!="")
  104. {
  105. fwrite($fp,$okdata)
  106. }
  107. fclose($fp)
  108. if($okdata=="")
  109. {
  110. @unlink($filename);
  111. return FALSE;
  112. fclose($m_fp);
  113. TRUE;
  114. /**
  115. * 페이지에서 반환된 쿠키 정보 가져오기
  116. *
  117. * @access public
  118. * @param string $gurl 주소 조정
  119. * @return string
  120. */
  121. function RefurlCookie($gurl)
  122. {
  123. global $gcookie,$lastRfurl;
  124. $gurl = Trim($gurl); 🎜> if(!empty($gcookie) && $lastRfurl==$gurl)
  125. {
  126. return $gcookie;
  127. }
  128. else
  129. {
  130. $lastRfurl=$gurl;
  131. }
  132. if(trim($gurl)=='')
  133. {
  134. return '';
  135. }
  136. $urlinfos = GetHostInfo($gurl);
  137. $ghost = $urlinfos['호스트'];
  138. $gquery = $urlinfos['query'];
  139. $sessionQuery = "$gquery HTTP/1.1rn 가져오기";
  140. $sessionQuery .= "호스트: $ghostrn";
  141. $sessionQuery .= "수락: */*rn";
  142. $sessionQuery .= "사용자 에이전트: Mozilla/4.0(호환; MSIE 5.00; Windows 98)rn";
  143. $sessionQuery .= "연결: Closernrn";
  144. $errno = "";
  145. $errstr = "";
  146. $m_fp = fsockopen($ghost, 80, $errno, $errstr,10) 또는 die($ghost.'
    ');
  147. fwrite($m_fp,$sessionQuery);
  148. $lnum = 0;
  149. //获取详细应答头
  150. $gcookie = "";
  151. while(!feof($m_fp))
  152. {
  153. $line = Trim(fgets($m_fp,256));
  154. if($line == "" || $lnum>100)
  155. {
  156. break;
  157. }
  158. else
  159. {
  160. if(preg_match("/^cookie/i", $line))
  161. {
  162. $gcookie = $line;
  163. 휴식;
  164. }
  165. }
  166. }
  167. fclose($m_fp);
  168. $gcookie를 반환합니다.
  169. }
  170. /**
  171. * URL의 호스트 및 쿼리 부분 가져오기
  172. *
  173. * @access public
  174. * @param string $gurl 주소 조정
  175. * @return string
  176. */
  177. 함수 GetHostInfo($gurl)
  178. {
  179. $gurl = preg_replace("/^http:///i", "", 트림($gurl));
  180. $garr['host'] = preg_replace("//(.*)$/i", "", $gurl);
  181. $garr['query'] = "/".preg_replace("/^([^/]*)//i", "", $gurl);
  182. $garr를 반환합니다.
  183. }
  184. ?>
  185. 제제대码
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!