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

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);

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

(0)

相关推荐

  • PHP实现的下载远程图片自定义函数分享

    复制代码 代码如下: <?php /**  * PHP下载远程图片到本地  *  * @param $url string 远程文件地址  * @param $filename string 保存后的文件名(为空时则为随机生成的文件名,否则为原文件名)  * @param $fileType array 允许的文件类型  * @param $dirName string 文件保存的路径(路径其余部分根据时间系统自动生成)  * @param $type int 远程获取文件的方式  * @ret

  • php下保存远程图片到本地的办法

    今天在整理资料的时候发现以前找到的一个函数,通过这个函数我们就可以实现上面的功能. 主要函数: 复制代码 代码如下: function GrabImage($url,$filename="") { if($url=="") return false; if($filename=="") { $ext=strrchr($url,"."); if($ext!=".gif" && $ext!=&q

  • PHP获取远程图片并保存到本地的方法

    本文实例讲述了PHP获取远程图片并保存到本地的方法.分享给大家供大家参考.具体实现方法如下: <?php function GrabImage($url, $filename = "") { if ($url == ""):return false; endif; //如果$url地址为空,直接退出 if ($filename == "") { //如果没有指定新的文件名 $ext = strrchr($url, "."

  • php正则匹配文章中的远程图片地址并下载图片至本地

    使用php的正则表达式来实现: $content = '这里是文章内容,这里插入一张图片测试 <img src="XXXXXXXXXXXXXXXXXXXX">'; $content = stripslashes ( $content ); $img_array = array (); // 匹配所有远程图片 preg_match_all ( "/(src|SRC)=["|'| ]{0,}(http://(.*).(gif|jpg|jpeg|bmp|png

  • PHP下载远程图片并保存到本地方法总结

    1.获取远程文件大小及信息的函数 function getFileSize($url){ $url = parse_url($url); if($fp = @fsockopen($url['host'],empty($url['port'])?80:$url['port'],$error)){ fputs($fp,"GET ".(empty($url['path'])?'/':$url['path'])." HTTP/1.1\r\n"); fputs($fp,&qu

  • 使用ThinkPHP自带的Http类下载远程图片到本地的实现代码

    Http类在目录ThinkPHP/Lib/ORG/Net下面.接下来看看是如何调用的. 复制代码 代码如下: <?php import("Com.Buyback.QueryAmazon"); import("ORG.Net.Http"); class Image { public static function getImage($isbn) { $bookInformModel = D("bookinform"); $result = $

  • php中通过正则表达式下载内容中的远程图片的函数代码

    这段程序其实是属于"小偷程序"的重要部分. 这一段程序只是下载远程图片的那一段而已,程序写的比较简单,大多部分都做了注释. 复制代码 代码如下: if (preg_match_all("/http://[^ "']+[.jpg|.gif|.jpeg|.png]+/ui",stripcslashes($content),$aliurl)){ $i=0; //多个文件++ while(list($key ,$v) = each($aliurl[0])){ //

  • php获取远程图片并下载保存到本地的方法分析

    本文实例讲述了php获取远程图片并下载保存到本地的方法.分享给大家供大家参考,具体如下: 远程图片指的是远端服务器上的数据我们可以通过php的许多函数来读取下载了,这里整理了两个可以自动下载远程图片并下载保存到本地的例子. 例1,可以自动识别图片类型然后进行对应的保存 /* *功能:php完美实现下载远程图片保存到本地 *参数:文件url,保存文件目录,保存文件名称,使用的下载方式 *当保存文件名称为空时则使用远程文件原来的名称 */ function getImage($url,$save_d

  • 用php获取远程图片并把它保存到本地的代码

    <?php function GrabImage($url,$filename="") {   if($url==""):return false;endif; if($filename=="") {     $ext=strrchr($url,".");     if($ext!=".gif" && $ext!=".jpg"):return false;endif

  • 解析php下载远程图片函数 可伪造来路

    gurl 要下载的图片地址$rfurl 来路.如果目标图像做了防盗链设置,可以绕过.$filename 下载图片保存的文件名,相对路径,不要用realpath$gcookie 调整cookie 伪造的cookie$JumpCount 跳转计数$maxtime 最大次数调用方法:DownImageKeep("http://www.baidu.com/img/baidu_jgylogo2.gif","http://baidu.com","a.gif"

  • php中使用gd库实现远程图片下载实例

    因为今天想写个远程下载图片的类,提前热身写了个php gd库实现远程图片下载功能,当然curl实现更好,php gd库实现远程图片下载功能主要使用gd库的两个函数ImageCreateFromXXX()用于生成图片函数和ImageXXX函数,XXX表示不同图片的扩展名,所以你要想办法获取远程图片的扩展名了,附上php代码如下: <?php header("Content-type:text/html ; charset=utf-8"); if (!empty($_POST['su

随机推荐