header('Content-Type:text/html;charset=utf-8');- /**
- * 写真を取得するためのクラス
- * @author tangpan
- */
- 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;
- }
-
- public function 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 = "|< ; img[^>]+src=['" ]?([^ '"?]+)['" >]|U";
- //
- 内のすべての画像リンクにグローバルに一致しますimg_out = array();
- preg_match_all( $img_pattern, $content, $img_out, PREG_SET_ORDER );
- echo '
' .'Pictures< /h1> ';
- //print_r($img_out[1]);
- foreach( $img_out as $key => $val ) {
- //echo htmlspecialchars($val[1]).'
' ;
- $this->save_one_image( $site_url, $val[1]);
- }
-
- }
-
- public function 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.22mm.cc/');
- ?>
-
コードをコピー
|