php将远程图片保存到本地服务器的实现代码


Posted in PHP onAugust 03, 2015

php如何将远程图片本地化,本文分享了实现代码

<?php 
//站点根目录 
$cfg_basedir = dirname(__FILE__); 
//停建目录属性 
$cfg_dir_purview ='0755'; 
 /*Get请求远程内容函数*/ 
 $cookie_file = dirname(__FILE__).'/cookie.txt'; //COOKIE存放地址 
  function pget($url,$ref=false,$head=false){ 
  $curl = curl_init(); // 启动一个CURL会话 
  curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址       
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在 
  curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器 
  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转 
  if($ref){ curl_setopt($curl, CURLOPT_REFERER, $ref);//带来的Referer 
  }else{ 
  curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer 
  } 
  curl_setopt($curl, CURLOPT_HTTPGET, 1); // 发送一个常规的Post请求 
  curl_setopt($curl, CURLOPT_COOKIEJAR, $GLOBALS['cookie_file']); // 存放Cookie信息的文件名称 
  curl_setopt($curl, CURLOPT_COOKIEFILE,$GLOBALS ['cookie_file']); // 读取上面所储存的Cookie信息 
  curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环 
  curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容 
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回 
  $tmpInfo = curl_exec($curl); // 执行操作 
  if (curl_errno($curl)) { 
 echo 'Errno'.curl_error($curl); 
  } 
   if($head){ $data['head']=curl_getinfo($curl);} 
  curl_close($curl); // 关键CURL会话 
  $data['data']=$tmpInfo; 
  return $data; // 返回数据 
} 
 
 
/** 
 * 创建所有目录 
 * 
 * @param   string $truepath 真实地址 
 * @param   string $mmode  模式 
 * @return  bool 
 */ 
if ( ! function_exists('MkdirAll')) 
{ 
  function MkdirAll($truepath) 
  { global $cfg_dir_purview; 
      if(!file_exists($truepath)) 
      { 
        mkdir($truepath, $cfg_dir_purview); 
        chmod($truepath, $cfg_dir_purview); 
        return true; 
      } 
      else 
      { 
        return true; 
      } 
  } 
} 
  /** 
 * 获得文章body里的外部资源 
 * 
 * @access  public 
 * @param   string $body 文档内容 
 * @return  string 
 */ 
function GetCurContent($body) 
{ 
  global $cfg_multi_site,$cfg_basehost,$cfg_basedir,$cfg_image_dir,$arcID,$cuserLogin,$dsql; 
  $cfg_uploaddir = '/c'; 
  $basehost = "http://".$_SERVER["HTTP_HOST"]; 
     
  $img_array = array(); 
  preg_match_all("/src=[\"|'|\s]{0,}(http:\/\/([^>]*)\.(gif|jpg|png))/isU",$body,$img_array); 
   
  $img_array = array_unique($img_array[1]); 
  $imgUrl = $cfg_uploaddir.'/'.date("ymd", time()); 
  $imgPath = $cfg_basedir.$imgUrl; 
  if(!is_dir($imgPath.'/')) 
  { 
    MkdirAll($imgPath, $GLOBALS['cfg_dir_purview']); 
    CloseFtp(); 
  } 
  $milliSecond = date('His',time()); 
  foreach($img_array as $key=>$value) 
  {  
    if(preg_match("#".$basehost."#i", $value)) 
    { 
      continue; 
    } 
    if(preg_match("#".$basehost."#i", $value)) 
    { 
      continue; 
    } 
    if(!preg_match("#^http:\/\/#i", $value)) 
    { 
      continue; 
    } 
    
    $http=pget($value,'$value',true); 
    $itype=($http['head']['content_type']); 
    if(!preg_match("#\.(jpg|gif|png)#i", $itype)) 
    { 
      if($itype=='image/gif') 
      { 
        $itype = ".gif"; 
      } 
      else if($itype=='image/png') 
      { 
        $itype = ".png"; 
      } 
      else 
      { 
        $itype = '.jpg'; 
      } 
    } 
    $milliSecondN = rand(1000,9999).rand(1000,9999); 
    $value = trim($value); 
    $rndFileName = $imgPath.'/'.$milliSecondN.'-'.$key.$itype; 
    $fileurl = $imgUrl.'/'.$milliSecondN.'-'.$key.$itype; 
 
    $tp = fopen($rndFileName, 'wb'); 
    fwrite($tp, $http['data']); 
    fclose($tp); 
     
    if(file_exists($cfg_basedir.$fileurl)) 
    { 
      $info = ''; 
      $imginfos = GetImageSize($rndFileName, $info); 
      $fsize = filesize($rndFileName); 
      $body = str_replace($value, $fileurl, $body); 
  
    } 
  } 
  return $body; 
} 
 
//调用方式 
echo GetCurContent($body);

以上就是实现远程图片本地化的全部代码,希望对大家的学习有所帮助。

PHP 相关文章推荐
PHP与javascript对多项选择的处理
Oct 09 PHP
最小化数据传输――在客户端存储数据
Oct 09 PHP
php设计模式 Chain Of Responsibility (职责链模式)
Jun 26 PHP
php中的注释、变量、数组、常量、函数应用介绍
Nov 16 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
php动态变量定义及使用
Jun 10 PHP
php开发工具有哪五款
Nov 09 PHP
php实现生成验证码实例分享
Apr 10 PHP
php简单压缩css样式示例
Sep 22 PHP
Yii框架表单提交验证功能分析
Jan 07 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 PHP
php基于session实现数据库交互的类实例
Aug 03 #PHP
php通过排列组合实现1到9数字相加都等于20的方法
Aug 03 #PHP
PHP实现递归复制整个文件夹的类实例
Aug 03 #PHP
UTF-8正则表达式如何匹配汉字
Aug 03 #PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 #PHP
php中ob函数缓冲机制深入理解
Aug 03 #PHP
如何利用http协议发布博客园博文评论
Aug 03 #PHP
You might like
js资料prototype 属性
2007/03/13 Javascript
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
JavaScript 不支持 indexof 该如何解决
2016/03/30 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
angularjs指令之绑定策略(@、=、&amp;)
2017/04/13 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
原生js实现3D轮播图
2020/03/21 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
python leetcode 字符串相乘实例详解
2018/09/03 Python
Python中创建二维数组
2018/10/17 Python
python数值基础知识浅析
2019/11/19 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
两年的个人工作自我评价
2014/01/10 职场文书
2014年乡镇植树节活动方案
2014/02/28 职场文书
公司应聘自荐书
2014/06/14 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
廉政承诺书
2015/01/19 职场文书
团员个人总结
2015/02/26 职场文书
世界气象日活动总结
2015/02/27 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python