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 相关文章推荐
example2.php
Oct 09 PHP
php全排列递归算法代码
Oct 09 PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 PHP
php实现按文件名搜索文件的远程文件查找器
May 10 PHP
destoon整合ucenter后注册页面不跳转的解决方法
Jun 21 PHP
php实现微信公众平台账号自定义菜单类
Oct 11 PHP
Zend Framework教程之Application和Bootstrap用法详解
Mar 10 PHP
PHP实现的登录,注册及密码修改功能分析
Nov 25 PHP
php array_reverse 以相反的顺序返回数组实例代码
Apr 11 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
Jul 13 PHP
tp5框架的增删改查操作示例
Oct 31 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 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
redis 队列操作的例子(php)
2012/04/12 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
JavaScript函数详解
2015/02/27 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
2017/02/18 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
keras 权重保存和权重载入方式
2020/05/21 Python
Python库安装速度过慢解决方案
2020/07/14 Python
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
屈臣氏马来西亚官网:Watsons马来西亚
2019/06/15 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
行政人员工作职责
2013/12/05 职场文书
银行实习的自我鉴定
2013/12/10 职场文书
yy婚礼司仪主持词
2014/03/14 职场文书
2014年法务工作总结
2014/12/11 职场文书
2015年派出所工作总结
2015/04/24 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
python四种出行路线规划的实现
2021/06/23 Python
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电