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 图片上传类代码
Jul 17 PHP
DedeCMS dede_channeltype表字段注释
Apr 07 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
php面象对象数据库操作类实例
Dec 02 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
Mar 15 PHP
php 生成加密公钥加密私钥实例详解
Jun 16 PHP
PHP实现的随机红包算法示例
Aug 14 PHP
php简单中奖算法(实例)
Aug 15 PHP
使用 laravel sms 构建短信验证码发送校验功能
Nov 06 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
最小化数据传输――在客户端存储数据
2006/10/09 PHP
Discuz 6.0+ 批量注册用户名
2009/09/13 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
php生成扇形比例图实例
2013/11/06 PHP
php页面缓存方法小结
2015/01/10 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
Python XML RPC服务器端和客户端实例
2014/11/22 Python
python 循环while和for in简单实例
2016/08/16 Python
详解Python中的静态方法与类成员方法
2017/02/28 Python
详解python字节码
2018/02/07 Python
opencv python 图像去噪的实现方法
2018/08/31 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
ASP.NET Core中的配置详解
2021/02/05 Python
html5指南-3.如何实现html元素拖拽功能
2013/01/07 HTML / CSS
汽车运用工程毕业生自荐信
2013/10/29 职场文书
物业公司采购员岗位职责
2013/12/31 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
贫困证明怎么写
2015/06/16 职场文书
JavaScript的Set数据结构详解
2022/02/18 Javascript