QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5491|回复: 5

[PHP开发] PHP 远程图片本地化

[复制链接]

183

主题

148

帖子

609

积分

注册会员

Rank: 2

积分
609
发表于 2015-10-26 13:31:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
  1. <?php

  2. /**
  3.         远程图片本地化

  4.     **/
  5.      
  6.     function pget($url,$ref=false,$head=false){
  7.             
  8.             $curl = curl_init(); // 启动一个CURL会话
  9.             curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址            
  10.             curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
  11.             curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
  12.             curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
  13.             curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
  14.             if($ref){ curl_setopt($curl, CURLOPT_REFERER, $ref);//带来的Referer
  15.             }else{
  16.             curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
  17.             }
  18.             curl_setopt($curl, CURLOPT_HTTPGET, 1); // 发送一个常规的Post请求
  19.             curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
  20.             curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
  21.             curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
  22.             $tmpInfo = curl_exec($curl); // 执行操作
  23.             
  24.             if (curl_errno($curl)) {
  25.                  
  26.                     echo 'Errno'.curl_error($curl);
  27.             }
  28.             
  29.             if($head){ $data['head']=curl_getinfo($curl);}
  30.             curl_close($curl); // 关键CURL会话
  31.             $data['data']=$tmpInfo;
  32.             return $data; // 返回数据
  33.     }


  34.       
  35.      //远程图片本地化
  36. function imgLocation($content){
  37.          
  38.          preg_match_all("/src=["|'|\s]{0,}(http:\/\/([^>]*)\.(gif|jpg|png)(.*"))/isU",$content,$img_array);
  39.          
  40.          $timeSrc=date("Ymd", time());
  41.          $img_array = array_unique($img_array[1]);
  42.          
  43.          $imgPath = dirname(__FILE__).'/../um/php/upload/'.$timeSrc;
  44.      
  45.         if(!is_dir($imgPath.'/'))
  46.         {
  47.              mkdir($imgPath, '0777',true);
  48.              chmod($imgPath, '0777');
  49.         }
  50.      
  51.          foreach($img_array as $key=>$value){
  52.               
  53.                $value=str_repeat('"',"",$value);
  54.                $http=pget($value,'$value',true);
  55.                
  56.                $itype=($http['head']['content_type']);
  57.                 if(!preg_match("#\.(jpg|gif|png)#i", $itype))
  58.                 {
  59.                     if($itype=='image/gif')
  60.                     {
  61.                         $itype = ".gif";
  62.                         
  63.                     }
  64.                     else if($itype=='image/png')
  65.                     {
  66.                         $itype = ".png";
  67.                     }
  68.                     else
  69.                     {
  70.                         $itype = '.jpg';
  71.                     }
  72.                 }
  73.                  
  74.                  
  75.                  
  76.                 $runds=md5(time());
  77.                 $rndFileName=$imgPath."/".$runds.$itype;
  78.                $tp = fopen($rndFileName, 'wb');
  79.                 fwrite($tp, $http['data']);
  80.                 fclose($tp);
  81.          
  82.                   if(file_exists($rndFileName))
  83.                     {
  84.                         
  85.                         $sqlurl="/home/um/php/upload/".$timeSrc."/".$runds.$itype;
  86.                         $content = str_replace($value, $sqlurl.'"', $content);
  87.                         $content = str_replace("alt=", "", $content);
  88.                      
  89.                
  90.                     }
  91.          }
  92.      
  93.             return $content;
  94.          
  95.      }
  96.       
  97.       
  98.      ?>
复制代码


1

主题

62

帖子

1101

积分

中级会员

Rank: 3Rank: 3

积分
1101

灌水之王

发表于 2015-10-27 14:55:25 | 显示全部楼层
精简版:
function downImage($url){
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_NOBODY, 0);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $ouput = curl_exec($curl);
        curl_close($curl);
        return $ouput;
        
}



$imageInfo = downImage($url);
$filename ="erweima.jpg";
file_put_contents($filename, $imageInfo);


183

主题

148

帖子

609

积分

注册会员

Rank: 2

积分
609
 楼主| 发表于 2015-10-27 21:54:40 | 显示全部楼层
GloomyLad 发表于 2015-10-27 14:55
精简版:
function downImage($url){
        $curl = curl_init($url);

curl

1

主题

62

帖子

1101

积分

中级会员

Rank: 3Rank: 3

积分
1101

灌水之王

发表于 2015-11-6 16:19:21 | 显示全部楼层
function pget($url,$ref=false,$head=false){
            
            $curl = curl_init(); // 启动一个CURL会话
            curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址            
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查{:2_06:}{:2_06:}
Life is the art of drawing without an eraser.

0

主题

3

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2015-12-30 19:15:16 | 显示全部楼层
Thank you

1

主题

22

帖子

197

积分

新手上路

Rank: 1

积分
197
发表于 2016-10-9 12:30:25 | 显示全部楼层
飘过~~~看一下了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

     
    战略合作|联系方式|广告赞助|商务合作|手机版|小黑屋|( 京ICP备14036609号-6 )

GMT+8, 2017-5-30 17:14

© 2013-2017 Powered by Discuz! X3.3. 本站由 又拍云 提供 CDN 图片存储服务 七牛 提供 CDN 静态文件加速服务

快速回复 返回顶部 返回列表