> 백엔드 개발 > PHP 튜토리얼 > 웹사이트 이미지를 원격으로 가져와 저장하는 PHP 코드

웹사이트 이미지를 원격으로 가져와 저장하는 PHP 코드

WBOY
풀어 주다: 2016-07-25 09:12:59
원래의
1087명이 탐색했습니다.

예: 웹사이트 데이터를 캡처하는 PHP 코드.

  1. /**
  2. * 이미지 캡처 클래스
  3. *
  4. * @package default
  5. * @author WuJunwei
  6. */
  7. class download_image
  8. {
  9. public $save_path / /이미지 저장 주소 캡처
  10. //이미지 크기 제한 캡처(단위:바이트) 이 제한보다 큰 이미지만 캡처
  11. public $img_size=0; 🎜> //반복적인 크롤링을 피하기 위해 이전에 크롤링한 하이퍼링크 주소를 기록하는 정적 배열을 정의합니다.
  12. public static $a_url_arr=array()
  13. /**
  14. * @param String $save_path 캡쳐된 이미지의 저장 주소
  15. * @param Int $img_size 캡쳐된 이미지의 저장 주소
  16. */
  17. public function __construct; ($save_path,$img_size)
  18. {
  19. $this->save_path=$save_path;
  20. $this->img_size=$img_size;
  21. }
  22. /**
  23. * 홈페이지 및 서브페이지의 이미지를 재귀적으로 다운로드하여 캡처하는 방법(재귀적 재귀)
  24. *
  25. * @param String $capture_url 이미지 캡처에 사용되는 URL
  26. *
  27. */
  28. 공용 함수 recursive_download_images($capture_url)
  29. {
  30. if (!in_array($capture_url,self::$a_url_arr)) //캡처 없음 통과
  31. {
  32. self ::$a_url_arr[]=$capture_url; // 정적 배열로 계산됨
  33. } else // 캡처됨, 함수를 직접 종료
  34. {
  35. return; this->download_current_page_images($capture_url); //현재 페이지의 모든 이미지를 다운로드합니다
  36. //읽을 수 없는 캡처 주소로 인한 경고 오류를 차단하려면 @를 사용하세요
  37. $content=@file_get_contents($capture_url );
  38. // 태그의 href 속성에서 ? 앞의 정규 부분을 일치시킵니다.
  39. $a_pattern = "|] href= ['" ]?([^ ' "?] )['" >]|U";
  40. preg_match_all($a_pattern, $content, $a_out, PREG_SET_ORDER);
  41. $tmp_arr=array (); //배열을 정의하여 현재 루프에서 캡처된 이미지의 하이퍼링크 주소를 저장합니다.
  42. foreach ($a_out as $k => $v)
  43. {
  44. /**
  45. * 하이퍼링크에서 빈 '', '#', '/' 및 중복 값 제거
  46. * 1: 하이퍼링크 주소 값은 현재 크롤링된 페이지의 URL과 같을 수 없습니다. 그렇지 않으면 무한 루프에 빠지다
  47. * 2: 하이퍼링크가 '' 또는 '#'이면 '/'도 이 페이지이고, 이것도 무한 루프에 빠진다.
  48. * 3: 가끔 하이퍼링크 주소가 웹페이지에 여러 번 표시됩니다. 삭제하지 않으면 하위 페이지가 반복적으로 다운로드됩니다.
  49. */
  50. if ( $v[ 1] && !in_array($v[1],self::$a_url_arr) &&!in_array($v[1],array('#','/',$ Capture_url) ) )
  51. {
  52. $tmp_arr[]=$v[1]
  53. }
  54. }
  55. foreach ($tmp_arr as $k => $v)
  56. {
  57. //하이퍼링크 경로 주소
  58. if ( strpos($v, 'http://')!==false ) //url에 http://가 포함되어 있으면 직접 액세스할 수 있습니다.
  59. {
  60. $a_url = $v;
  61. }else //그렇지 않으면 상대 주소인 것으로 판명되며, 하이퍼링크의 액세스 주소를 재구성해야 합니다.
  62. {
  63. $domain_url = substr($capture_url, 0,strpos( $capture_url, ' /',8) 1)
  64. $a_url=$domain_url.$v
  65. }
  66. $this->recursive_download_images($a_url)
  67. }
  68. }
  69. /**
  70. * 현재 웹페이지 아래의 모든 이미지 다운로드
  71. *
  72. * @param String $capture_url 이미지 캡처에 사용되는 웹페이지 주소
  73. * @return Array 웹페이지의 모든 이미지에 대한 img 태그의 URL 주소 중 하나 현재 웹페이지 배열
  74. */
  75. 공개 함수 download_current_page_images($capture_url)
  76. {
  77. $content=@file_get_contents($capture_url) //Shield 경고 오류
  78. // img 태그의 src 속성에서 ? 앞의 일반 부분과 일치
  79. $img_pattern = "|] src=['" ]?([^ '"?] )[ ' " >]|U";
  80. preg_match_all($img_pattern, $content, $img_out, PREG_SET_ORDER)
  81. $photo_num = count($img_out)
  82. // 일치하는 사진 수량
  83. echo '

    '.$capture_url . "총 발견" . " 사진

    "
  84. foreach ($img_out as $k => $v) > $this->save_one_img($capture_url,$v[1])
  85. }
  86. }
  87. /**
  88. * 단일 이미지 저장 방법
  89. *
  90. * @param String $capture_url 이미지 캡처에 사용된 웹 주소
  91. * @param String $img_url 저장해야 하는 이미지의 URL
  92. *
  93. */
  94. 공개 함수 save_one_img($capture_url,$img_url)
  95. {
  96. //이미지 경로 주소
  97. if ( strpos($img_url, ' http://')!==false )
  98. {
  99. // $img_url = $img_url
  100. }else
  101. {
  102. $domain_url = substr($capture_url, 0,strpos( $capture_url, '/',8) 1); $img_url=$domain_url.$img_url;
  103. }
  104. $pathinfo = pathinfo($img_url); //이미지 경로 정보 가져오기
  105. $ pic_name=$pathinfo['basename']; //사진 이름을 가져옵니다
  106. if (file_exists($this->save_path.$pic_name)) //사진이 존재하면 캡쳐되었음을 증명합니다 , 함수 종료
  107. {
  108. echo $img_url . '이 이미지가 캡처되었습니다!
    return;
  109. }
  110. //이미지 내용을 문자열로 읽습니다.
  111. $img_data = @file_get_contents($img_url) //이미지 주소를 읽을 수 없어 발생하는 경고 오류 읽어보세요
  112. if ( strlen($img_data) > $this->img_size ) //크기가 제한보다 큰 사진을 다운로드합니다
  113. {
  114. $img_size = file_put_contents($this->save_path . $pic_name, $img_data );
  115. if ($img_size)
  116. {
  117. echo $img_url . '이미지가 저장되었습니다. < ;br/>';
  118. } else
  119. {
  120. echo $img_url ' 이미지를 저장하세요!
    ';
  121. }
  122. } else
  123. {
  124. echo $img_url '사진 읽기 실패!
    ';
  125. }
  126. }
  127. } // END
  128. set_time_limit(120); //스크립트의 최대 실행 시간을 상황에 따라 설정
  129. $download_img=new download_image('E:/images/',0) //다운로드 이미지 객체 인스턴스화
  130. $download_img-> recursive_download_images('http://bbs.it-home .org/'); //재귀적으로 이미지 캡처 방법
  131. //$download_img->download_current_page_images($_POST['capture_url']); 현재 페이지 이미지 방법
  132. ?>
코드 복사

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