php获取远程图片

jerry thinkphp 2015年11月18日 收藏

用curl的实现了,一下代码我测试成功的哦

function auto_save_image($body, $path='default'){
// $img_array = explode('&',$body);
$img_array = array();
preg_match_all("/(src)=[\"|\'| ]{0,}(http:\/\/(.*)\.(gif|jpg|jpeg|bmp|png))[\"|\'| ]{0,}/isU", $body, $img_array);
$img_array = array_unique($img_array[2]); //也可以自动匹配
// leePrint($img_array);
set_time_limit(0);
$imgPath = SITE_PATH.'Public/Uploads/'.$path.'/'.date('Ymd');
$milliSecond = strftime("%H%M%S",time());
if(!is_dir($imgPath)) @mkdir($imgPath,0777);
// echo $imgPath;
// leePrint(is_dir($imgPath));
foreach($img_array as $key =>$url) {
$url = trim($url);
$curl = curl_init(); 
// 设置你需要抓取的URL 
curl_setopt($curl, CURLOPT_URL, $url); 
// 设置header 
curl_setopt($curl, CURLOPT_HEADER, 0); 
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
// 运行cURL,请求网页 
$file = curl_exec($curl); 
// 关闭URL请求 
curl_close($curl); 
//将文件写入获得的数据 
$filename = $imgPath.'/'.md5_file($url).'.'.substr($url,-3,3);
// leePrint($filename);
$write = @fopen($filename,"w"); 
// leePrint($write);
if($write==false) { 
return false; 
} 
if(fwrite($write,$file)==false) { 
return false; 
} 
if(fclose($write)==false) { 
return false; 
}
// leePrint($filename);
$filename = str_replace(SITE_PATH, '/', $filename);
$body = @ereg_replace($url, $filename, $body);
}
return $body;
}

后台添加文章时,直接下载远程图片

<?php

    $str = 'http://www.thinkphp.cn/Uploads/info/2013-07-24/51ef32f4490e3_100_100.jpg&http://www.thinkphp.cn/Uploads/ad/2013-05-09/518b1b272d448.jpg&http://www.thinkphp.cn/Uploads/ad/2013-07-02/51d24ce472da0.jpg&http://www.thinkphp.cn/Uploads/ad/2013-07-04/51d4c7c4aa490.jpg';

    auto_save_image($str);


    function auto_save_image($body){
        $img_array = explode('&',$body);
        /*$img_array = array();
        preg_match_all("/(src)=[\"|\'| ]{0,}(http:\/\/(.*)\.(gif|jpg|jpeg|bmp|png))[\"|\'| ]{0,}/isU", $body, $img_array);
        $img_array = array_unique($img_array[2]);*/ //也可以自动匹配
        set_time_limit(0);
        $imgPath = "uploads/allimg/".date("Ymd")."/";
        $milliSecond = strftime("%H%M%S",time());
        if(!is_dir($imgPath)) @mkdir($imgPath,0777);
        foreach($img_array as $key =>$value)
        {
                $value = trim($value);
                $get_file = @file_get_contents($value);
                $rndFileName = $imgPath."/".$milliSecond.$key.".".substr($value,-3,3);
                if($get_file)
                {
                        $fp = @fopen($rndFileName,"w");
                        @fwrite($fp,$get_file);
                        @fclose($fp);
                }
                $body = @ereg_replace($value, $rndFileName, $body);
        }
     
        return $body;
    }