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