-
- header('Content-Type: text/html;charset=utf-8');
- /**
- * 이미지 캡쳐에 사용되는 클래스
- */
- class download_image {
- public $_save_path = NULL; //사진 저장 경로
- public $_limit_size = NULL; //사진 제한 크기
- public static $_img_url_old = array( ) ; //크롤링된 이미지 링크 주소 저장
- public static $_a_page_url = array(); //크롤링된 페이지 저장
- public function __construct( $_save_path, $_limit_size) {
- $this->_save_path = $_save_path;
- $this->_limit_size = $_limit_size;
- }
-
- 공개 함수 get_all_page_image( $site_url ) {
- if ( $site_url == '' ) {
- return false;
- }
- if ( ! in_array( $site_url, self::$_a_page_url ) ) { // 현재 페이지가 크롤링되었는지 확인
- self::$_a_page_url [] = $site_url ; //하이퍼링크를 정적 배열에 저장
- } else {
- return; //크롤링된 경우 밖으로 이동
- }
- $this->download_the_page_image( $ site_url );
- $content = @file_get_contents($site_url);
- $a_page_url = "|] href=['\" ]?([^ '\"?] )[ '\" > ;]|U";
- $all_url = array();
- preg_match_all( $a_page_url, $content, $all_url, PREG_SET_ORDER );
- if ( $all_url != NULL ) {
- foreach( $all_url as $key => $val ) {
- /**
- * 무한 루프 진입을 방지하기 위한 정적 하이퍼링크
- * 현재 페이지 링크 표현('', '#', '/') 종료
- */
- if ( Trim($val[1]) != '' && ! in_array( $val [1], self::$_a_page_url ) && ! in_array( $val[1], array('#','/',$site_url) ) ) {
- self::$_a_page_url[] = $val[ 1] / /요구 사항을 충족하는 하이퍼링크를 정적 배열
- }
- }
- }
- if ( self::$_a_page_url != NULL ) {
- foreach( self: :$_a_page_url as $keys => $vals ) {
- if ( strpos( $vals, 'http://' ) === false ) { //하이퍼링크에 http://가 포함되어 있지 않으면 직접 방문할 수 없습니다.
- // 이미지 링크 주소가 상대 주소인 경우 주소를 재조합합니다
- $a_domain_url = substr( $site_url, 0, strpos( $site_url, '/',8 ) 1 );
- $ a_img_url = $a_domain_url.$vals;
- }
- //재귀 호출, 각 하이퍼링크 페이지에 액세스
- $this->get_all_page_image( $a_img_url );
- }
- }
- }
-
- /**
- * 현재 페이지 아래의 모든 이미지 링크 다운로드
- * @param $site_url <페이지 주소>
- */
- public function download_the_page_image( $site_url ) {
- // 현재 링크 주소 페이지의 모든 내용을 가져옵니다
- $img_pattern = NULL;
- $ content = @file_get_contents( $site_url );
- $img_pattern = "|] src=['\" ]?([^ '\"?] )['\" > ]| U";
- //
- $img_out = array();
- preg_match_all( $img_pattern, $content, $img_out, PREG_SET_ORDER ); echo '
'. $site_url . count($img_out) . '사진';
- //print_r($img_out[1]);
- foreach( $img_out as $key => $val ) {
- //echo htmlspecialchars($val[1]).'
';
- $this->save_one_image( $site_url , $ val[1]);
- }
-
- }
-
- 공개 함수 save_one_image( $site_url, $img_url ) {
- if ( strpos( $img_url, 'http:/ /' ) === false ) {
- // 이미지 링크 주소가 상대 주소인 경우 주소를 재조합합니다
- $domain_url = substr( $site_url, 0, strpos( $site_url, '/',8 ) 1 );
- $img_url = $domain_url.$img_url;
- }
- $pic_name = basename( $img_url ); //사진 이름 가져오기
-
- if ( in_array( $img_url, self: :$_img_url_old ) ) {
- echo $img_url .'이 이미지가 캡처되었습니다!
return; - }
- //이미지 내용을 가져와서 문자열 쓰기
- $img_data = @file_get_contents( $img_url );
- if ( strlen($img_data) < ; $this->_limit_size ) { //사진 크기가 제한 범위 이내입니다
- $img_boo = @file_put_contents( $this->_save_path.md5(microtime()).$pic_name, $img_data );
- if ( $img_boo ) {
- echo $img_url .'사진이 성공적으로 저장되었습니다!
';
- self::$_img_url_old[] = $img_url;
- } else {
- echo $img_url .' 이미지 저장에 실패했습니다!
';
- }
- } else {
- echo $img_url .' 이미지 크기가 제한을 벗어났습니다!
';
- }
- }
- }
- set_time_limit(0);
- $download_images = new download_image('surces_Img/',1024*1024 *100);
- $download_images->get_all_page_image('http://www.baidu.com/');
- ?>
-
-
복사 코드
|