> 백엔드 개발 > PHP 튜토리얼 > 웹페이지 캡처

웹페이지 캡처

WBOY
풀어 주다: 2016-07-25 08:49:44
원래의
1161명이 탐색했습니다.
  1. header('Content-Type: text/html;charset=utf-8');
  2. /**
  3. * 사진찍기 수업
  4. * @author tangpan
  5. */
  6. class download_image {
  7. public $_save_path = NULL; // 이미지 저장 경로
  8. public $_limit_size = NULL; // 이미지 제한 크기
  9. public static $_img_url_old = array(); 크롤링된 이미지 링크 주소 저장
  10. public static $_a_page_url = array(); //크롤링된 페이지 저장
  11. public function __construct( $_save_path, $_limit_size) {
  12. $this- >_save_path = $_save_path ;
  13. $this->_limit_size = $_limit_size;
  14. }
  15. 공개 함수 get_all_page_image( $site_url ) {
  16. if ( $site_url == '' ) {
  17. return false ;
  18. }
  19. if ( ! in_array( $site_url, self::$_a_page_url ) ) { //현재 페이지가 크롤링되었는지 확인
  20. self::$_a_page_url[] = $site_url; 하이퍼링크를 정적 배열에 저장
  21. } else {
  22. return; //크롤링된 경우 점프아웃
  23. }
  24. $this->download_the_page_image( $site_url ); content = @file_get_contents($site_url);
  25. $a_page_url = "|] href=['" ]?([^ '"?] )['" >] |U";
  26. $all_url = array();
  27. preg_match_all( $a_page_url, $content, $all_url, PREG_SET_ORDER );
  28. if ( $all_url != NULL ) {
  29. foreach( $all_url as $key = > $val ) {
  30. /**
  31. * 무한 루프 진입을 방지하기 위한 정적 하이퍼링크
  32. * 현재 페이지 링크 표현('', '#', '/') 종료
  33. */
  34. if ( Trim($val[1]) != '' && ! in_array( $val[1], self: :$_a_page_url ) && ! in_array( $val[1], array('#','/',$site_url) ) ) {
  35. self::$_a_page_url[] = $val[1]; 요구 사항은 정적 배열
  36. }
  37. }
  38. }
  39. if ( self::$_a_page_url != NULL ) {
  40. foreach( self::$_a_page_url as $keys => $vals ) {
  41. if ( strpos( $vals, 'http://' ) === false ) { //하이퍼링크에 http://가 포함되어 있지 않으면 직접 액세스할 수 없습니다.
  42. // 이미지 링크 주소는 상대 주소이므로 주소를 재구성합니다.
  43. $a_domain_url = substr( $site_url, 0, strpos( $site_url, '/',8 ) 1 );
  44. $a_img_url = $a_domain_url.$ vals;
  45. }
  46. //재귀 호출, 각 하이퍼링크 페이지에 액세스
  47. $this->get_all_page_image( $a_img_url );
  48. }
  49. }
  50. }
  51. /**
  52. * 현재 페이지 아래의 모든 이미지 링크 다운로드
  53. * @param $site_url <페이지 주소>
  54. */
  55. public function download_the_page_image( $site_url ) {
  56. // 현재 링크 주소 페이지의 내용을 모두 가져옵니다
  57. $img_pattern = NULL;
  58. $content = @file_get_contents ( $ site_url );
  59. $img_pattern = "|] src=['" ]?([^ '"?] )['" >]|U";
  60. / /Global
  61. $img_out = array();
  62. preg_match_all( $img_pattern, $content, $img_out, PREG_SET_ORDER );
  63. echo '

    '의 모든 이미지 링크와 일치합니다. $site_url . '전체 발견' . count($img_out) . '사진

    ';
  64. //print_r($img_out[1]);
  65. foreach( $img_out as $key => ; $ val ) {
  66. //echo htmlspecialchars($val[1]).'
    ';
  67. $this->save_one_image( $site_url, $val[1]);
  68. }
  69. }
  70. 공개 함수 save_one_image( $site_url, $img_url ) {
  71. if ( strpos( $img_url, 'http://' ) === false ) {
  72. // 이미지 링크 주소가 상대 주소인 경우 주소를 재조합합니다
  73. $domain_url = substr( $site_url, 0, strpos( $site_url, '/',8 ) 1 );
  74. $img_url = $ domain_url.$img_url;
  75. }
  76. $pic_name = basename( $img_url ); //사진 이름 가져오기
  77. if ( in_array( $img_url, self::$_img_url_old ) ) 🎜> echo $img_url .'이 이미지가 캡처되었습니다!
    ';
  78. return;
  79. }
  80. //이미지 콘텐츠를 가져와서 문자열에 씁니다.
  81. $img_data = @file_get_contents( $img_url );
  82. if ( strlen($img_data) < $this->_limit_size ) { // 이미지 크기가 제한 범위 내에 있습니다
  83. $img_boo = @file_put_contents( $this->_save_path.md5(microtime()).$pic_name, $img_data );
  84. if ( $img_boo ) {
  85. echo $ img_url .'이미지가 성공적으로 저장되었습니다!
    ';
  86. self::$_img_url_old[] = $img_url;
  87. } else {
  88. echo $img_url .' 이미지 저장에 실패했습니다!
    ';
  89. }
  90. } else {
  91. echo $img_url .' 이미지 크기가 제한을 벗어났습니다!
    ';
  92. }
  93. }
  94. }
  95. set_time_limit(0);
  96. $download_images = new download_image('surces_Img/',1024*1024 *100);
  97. $download_images->get_all_page_image('http://www.22mm.cc/');
  98. ?>
코드 복사


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