用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;
}