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