PHP 文章中的远程图片采集到本地的代码


Posted in PHP onJuly 30, 2009

第一步. 先从文章中把所有<img ...> 用正则 抠出来.

$message //文章内容 
//正则(这个还不是) 
$reg = "/<img[^>]*src=\"(http:\/\/(.+)\/(.+)\.(jpg|gif|bmp|bnp))\"/isU"; 
//把抠出来的 img 地址存放到 $img_array 变量中 
preg_match_all($reg, $message, $img_array, PREG_PATTERN_ORDER); 
//过滤重复的图片 
$img_array = array_unique($img_array[1]);

第二步. 把$img_array 数组循环一下. 做图片保存和文章位置替换
foreach ($img_array as $img){ 
//判断是否是自己网站上的 图片 
if('xxx.com' != get_domain($img)){// 如果这个图片不是自己服务器上的 
//读取图片文件 
$Gimg = new GetImage(); 
$Gimg->source = $img; 
$Gimg->save_to = './data/temp/'; 
$FILE = $Gimg->download(); //图片移动到本地 
//保存到相册 得到图片保存的位置 
$img_path = pic_save($FILE,0,''); 
//文本路径替换 
$message = str_replace($img, $img_path, $message); 
} 
}

....这时候 $message 里面已经图片已经替换为自己服务器本地的地址,并且图片也保存到自己的服务器上.
//下面一个函数 和 类是从网络上找的. 
//从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->source, 0, -$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); 
} 
}
PHP 相关文章推荐
修改了一个很不错的php验证码(支持中文)
Feb 14 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
Jun 20 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
Laravel 5框架学习之数据库迁移(Migrations)
Apr 08 PHP
PHP防止刷新重复提交页面的示例代码
Nov 11 PHP
PHP中大括号'{}'用法实例总结
Feb 08 PHP
php 数组元素快速去重
May 05 PHP
浅谈PHP面向对象之访问者模式+组合模式
May 22 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
PHP explode()函数用法讲解
Feb 15 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 PHP
laravel 实现上传图片到本地和前台访问示例
Oct 21 PHP
PHP 中文乱码解决办法总结分析
Jul 30 #PHP
PHP 变量定义和变量替换的方法
Jul 30 #PHP
PHP file_get_contents 函数超时的几种解决方法
Jul 30 #PHP
一个PHP数组应该有多大的分析
Jul 30 #PHP
PHP UTF8编码内的繁简转换类
Jul 20 #PHP
php 验证码制作(网树注释思想)
Jul 20 #PHP
php PDO中文乱码解决办法
Jul 20 #PHP
You might like
PHP取进制余数函数代码
2012/01/19 PHP
PHP查询分页的实现代码
2017/06/09 PHP
HTML页面滚动时获取离页面顶部的距离2种实现方法
2013/09/05 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
js如何判断输入字符串长度
2015/12/16 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
iframe高度自适应及隐藏滚动条的实例详解
2017/09/29 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
Python获取任意xml节点值的方法
2015/05/05 Python
python友情链接检查方法
2015/07/08 Python
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
详解python的四种内置数据结构
2019/03/19 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
团组织关系介绍信
2014/01/12 职场文书
网上商城创业计划书范文
2014/01/31 职场文书
计划生育诚信协议书
2014/11/02 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
求职信内容一般写什么?
2015/03/20 职场文书
医院员工辞职信范文
2015/05/12 职场文书
党风廉政承诺书2016
2016/03/25 职场文书