检查文本内容中的远程图片,下载远程图片到本地的方法示例。

/**
* 下载远程图片到本地
*
* @param string $txt 用户输入的文字,可能包含有图片的url
* @param string $keywords 网站域名关键字,路径中含有这个关键字的图片(即本网站图片)跳过
* @return string
*/
public function getImageToLocal($txt,$keywords = 'xxx.com')
{ $matches = array();
preg_match_all('/<img.+?src=(.+?)\s/is',$txt,$matches);
if(!is_array($matches)) return $txt;
$curl = new curl();
$curl -> setHeader(true);
foreach ($matches[1] as $k => $v)
{
$url = trim($v,"\"'");
$ext = '';
if(strpos($url,$keywords) === false && substr($url,0,7) == 'http://') //非本站地址,需要下载图片
{
$curl -> setUrl($url);
$curl -> setTimeout(5);
$data = $curl -> send();
list($header,$imageData) = explode("\n\n",$data);
if($ext = $this -> getImageExtension($header))
{
$file = IMAGE_SAVE_DIR . date('YmdHis') . rand(1,100) . $k . '.' . $ext;
@file_put_contents($file,$imageData);
if(is_file($file)) $txt = str_replace($v,'"' . str_replace(ROOT,'',$file) . '"',$txt);
}
}
}
return $txt;
} /**
* 从HTTP头分离出图片的扩展名
*
* @param string $header HTTP头
* @return string
*/
function getImageExtension($header)
{
$arr = explode("\n",$header);
foreach($arr as $k => $v)
{
$line = explode(':',$v);
if($line[0] == 'Content-Type') return str_replace('image/','',trim($line[1]));
}
return '';
}

php开发中将远程图片本地化的方法的更多相关文章

  1. 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化

    <?php /* [LocoySpider] (C)2005-2010 Lewell Inc. 火车采集器 DedeCMS 5.7 UTF8 文章发布接口 Update content: 图片加 ...

  2. 【代码审计】EasySNS_V1.6远程图片本地化导致Getshell

    0x00 环境准备 EasySNS官网:http://www.imzaker.com 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/inde ...

  3. php 远程图片本地化

    /** * 把新浪的远程图片下载到自己服务器上 * * @access public * @param goods_desc $goods_desc 要处理的内容 * @return mix 如果成功 ...

  4. ecshop 远程图片本地化

    define('IN_ECS', true); require(dirname(__FILE__) . '/includes/init.php'); $smarty->assign('siteD ...

  5. php 下载远程图片 的几种方法(转)

    1.获取远程文件大小及信息的函数 function getFileSize($url){          $url = parse_url($url);          if($fp = @fso ...

  6. 织梦dedecms 无法下载远程图片 fsockopen函数被禁用的解决方法

    在linux服务器上fsockopen()函数被无情的禁用了(这其实是出于安全考虑,可以理解),下载远程图片的功能就没有办法使用了.找了一些资料之后,找到了解决方法,就是用stream_socket_ ...

  7. php下载远程图片方法总结(curl手动解析header)curl跳转问题解决

    常用方法一般有:. file_get_contents file_put_contents readfile($file) //效率很高. 一般代码: /** * 抓取远程图片 * * @param ...

  8. ecshop_商品描述远程图片自动本地化插件

    解压缩文件,覆盖 ecshop 的 \includes\fckeditor文件夹. 这样在后台添加商品的商品详细描述,编辑器最后一个按钮就是自动下载 远程图片到你的网站空间,这样可防止对方网站图片失效 ...

  9. PHP抓取远程图片教程(包含不带后缀图片)

    之前做微信登录开发时候,发现微信头像图片没有后缀名,传统的图片抓取方式不奏效,需要特殊的抓取处理.所以,后来将各种情况结合起来,封装成一个类,分享出来. 创建项目 作为演示,我们在www根目录创建项目 ...

随机推荐

  1. linux进程创建

    1.  进程是程序的执行,会被加载到内存中,每个进程包括程序的代码和数据,其中数据包括程序的变量的数据,外部数据,程序堆栈. 2. Linux中,输入命令,如vi main.c 通过shell来执行, ...

  2. Linux 0.11下信号量的实现和应用

    Linux 011下信号量的实现和应用 生产者-消费者问题 实现信号量 信号量的代码实现 关于sem_wait和sem_post sem_wait和sem_post函数的代码实现 信号量的完整代码 实 ...

  3. 很久之前写的Ajax库

    很久之前写的一个小型AJAX的js,放在上面以免以后想玩了找不到了. // version : 0.1 beta // author : __Ajax function __Ajax(url,opti ...

  4. phpcms首页商机的调用,多种方式

    <hr /> {pc:get sql="select * from phpcms_yp_buy" order="updatetime DESC"} ...

  5. insert 和 if x is not None

    insert(位置,元素) #!/usr/bin/python aList = [123, 'xyz', 'zara', 'abc'] aList.insert( 3, 2009) print &qu ...

  6. Python中函数参数传递问题

    先上两个例子: http://python.jobbole.com/85231/ a = 1 def fun(a): a = 2 fun(a) print a # 结果为1 fun(a)中的a,可以看 ...

  7. 转:视觉中国的NoSQL之路:从MySQL到MongoDB

    起因 视觉中国网站(www.chinavisual.com)是国内最大的创意人群的专业网站.2009年以前,同很多公司一样,我们的CMS和社区产品都构建于PHP+Nginx+MySQL之上:MySQL ...

  8. C语言学习--链表

    #include "node.h" #include<stdio.h> #include<stdlib.h> //typedef struct _node ...

  9. IIS的安装与配置详细图解教程。

    一.这里讲的是在WINDOWS 2003下的IIS组件的安装,至于WINDOWS XP,请看这里:   开始-控制面板-添加或删除程序-添加/删除windows组件   勾选应用程序服务器   勾选I ...

  10. gcc编译动态和静态链接库

    我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库两种.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不会被连接到目标代码中,而是 ...