Home  >  Article  >  Backend Development  >  Collect remote images in php articles to local_PHP tutorial

Collect remote images in php articles to local_PHP tutorial

WBOY
WBOYOriginal
2016-07-20 11:06:161048browse

$message //Article content

//Regular (this is not yet)

$reg = "/]*src="(http://(.+)/(.+).(jpg|gif|bmp|bnp))"/isU";

//Store the extracted img address into $img_array variable

preg_match_all($reg, $message, $img_array, PREG_PATTERN_ORDER);

//Filter duplicate images

$img_array = array_unique($img_array[1]);Copy the code

Step 2. Loop the $img_array array. Save the image and replace the article position

foreach ($img_array as $img){

 
// Determine whether the picture is on your own website

if('xxx.com' != get_domain($img)){// If this picture is not on your own server

                                                                   

 
$Gimg = new GetImage();

$Gimg
->source = $img;   

$Gimg
->save_to = './data/temp/';   

$FILE
$Gimg->download( ; = pic_save(

$FILE

,
0, ''); //Text path replacement $message = str_replace

(
$img

,
$img_path, $message );                                                                                  At this time, the image in $message has been replaced with the local address of your server , and the image is also saved to your server . Copy the code //The following
function
and class are found from the Internet.



//Get the
domain name from the url


function get_domain($url){ $pattern 



"/[w-]+.(com|net|org|gov|cc|biz|info|cn)(. (cn|hk))*/";

    
preg_match($pattern$url$matches);

    if(
count($matches) > 0) {

        return 
$matches[0];

    }else{

        
$rs parse_url($url);

        
$main_url $rs["host"];

        if(!
strcmp(long2ip(sprintf("%u",ip2long($main_url))),$main_url)) {

            return 
$main_url;

        }else{

            
$arr explode(".",$main_url);

            
$count=count($arr);

            
$endArr = array("com","net","org","3322");//com.cn  net.cn 等情况

            
if (in_array($arr[$count-2],$endArr)){

                
$domain $arr[$count-3].".".$arr[$count-2].".".$arr[$count-1];

            }else{

                
$domain =  $arr[$count-2].".".$arr[$count-1];

            }

            return 
$domain;

        }
// end if(!strcmp...)

    
}// end if(count...)

}// end function



// 从远程吧图片载到服务器本地 的 类

class GetImage {



var 
$source;

var 
$save_to;

var 
$quality;



function 
download($method 'curl') {

    
$info = @GetImageSize($this->source);

    
$mime $info['mime'];

    

// What sort of image?

    
$type substr(strrchr($mime'/'), 1);

    switch (
$type){

        case 
'jpeg':

            
$image_create_func 'ImageCreateFromJPEG';

            
$image_save_func 'ImageJPEG';

            
$new_image_ext 'jpg';

        

            
// Best Quality: 100

            
$quality = isSet($this->quality) ? $this->quality 100;

            break;

        

        case 
'png':

            
$image_create_func 'ImageCreateFromPNG';

            
$image_save_func 'ImagePNG';

            
$new_image_ext 'png';

        

            
// Compression Level: from 0  (no compression) to 9

            
$quality = isSet($this->quality) ? $this->quality 0;

            break;

        

        case 
'bmp':

            
$image_create_func 'ImageCreateFromBMP';

            
$image_save_func 'ImageBMP';

            
$new_image_ext 'bmp';

            break;

        

        case 
'gif':

            
$image_create_func 'ImageCreateFromGIF';

            
$image_save_func 'ImageGIF';

            
$new_image_ext 'gif';



            break;

        

        case 
'vnd.wap.wbmp':

            
$image_create_func 'ImageCreateFromWBMP';

            
$image_save_func 'ImageWBMP';

            
$new_image_ext 'bmp';

            break;

        

        case 
'xbm':

            
$image_create_func 'ImageCreateFromXBM';

            
$image_save_func 'ImageXBM';

            
$new_image_ext 'xbm';

            break;

        

        default:

            
$image_create_func 'ImageCreateFromJPEG';

            
$image_save_func 'ImageJPEG';

            
$new_image_ext 'jpg';

    }

    

    if(isSet(
$this->set_extension)){

        
$ext strrchr($this->source".");

        
$strlen strlen($ext);

        
$new_name basename(substr($this->source0, -$strlen)).'.'.$new_image_ext;

    }else{

        
$new_name basename($this->source);

    }

    

    
$save_to $this->save_to."/blog_insert_temp_".time().mt_rand(1,99).".".$new_image_ext;

    
//输出对象 组成跟$_FILE变量一样 得到后自己和平常图片上传处理一样了

    
$img_info['name'] = basename($this->source);

    
$img_info['type'] = $mime;

    
$img_info['size'] = 1000;

    
$img_info['tmp_name'] = $save_to;

    
$img_info['error'] = 0;

        

    if(
$method == 'curl'){

        
$save_image $this->LoadImageCURL($save_to);

    }elseif(
$method == 'gd'){

        
$img $image_create_func($this->source);

    

            if(isSet(
$quality)){

               
$save_image $image_save_func($img$save_to$quality);

            }else{

               
$save_image $image_save_func($img$save_to);

            }

           

    }

         return 
$img_info;

    }

    

    function 
LoadImageCURL($save_to){

        
$ch curl_init($this->source);

        
$fp fopen($save_to"wb");

        

        
// set URL and other appropriate options

        
$options = array(CURLOPT_FILE => $fp,

                         
CURLOPT_HEADER => 0,

                         
CURLOPT_FOLLOWLOCATION => 1,

                         
CURLOPT_TIMEOUT => 60); // 1 minute timeout (should be enough)

        

        
curl_setopt_array($ch$options);

        

        
curl_exec($ch);

        
curl_close($ch);

        
fclose($fp);



    }

}

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445035.htmlTechArticle$message //文章内容 //正则(这个还不是) $reg = /img[^]*src=(http://(.+)/(.+).(jpg|gif|bmp|bnp))/isU ; //把抠出来的img地址存放到$img_array 变量 中 preg_match_a...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn