php 保存编辑器内容中的远程图片为本地图片

Posted fogwu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 保存编辑器内容中的远程图片为本地图片相关的知识,希望对你有一定的参考价值。

有时,我们的编辑器复制过来的图片是远程的,需要下载到本地服务器上。

 

1、提取远程图片

  /*
*功能:php完美实现下载远程图片保存到本地
*参数:文件url,保存文件目录,保存文件名称,使用的下载方式
*当保存文件名称为空时则使用远程文件原来的名称
*/

    private   function getImage($url,$filename=‘‘,$type=0){
        if(trim($url)==‘‘){
            return array(‘file_name‘=>‘‘,‘save_path‘=>‘‘,‘error‘=>1);
        }
        $filePath=‘upload/content/‘.date(‘Ymd‘);
      //  if(trim($save_dir)==‘‘){
            $save_dir=ROOT_PATH. DS . ‘www‘. DS . $filePath ;
        //}
        if(trim($filename)==‘‘){//保存文件名
            $ext=strrchr($url,‘.‘);
            if($ext!=‘.gif‘&&$ext!=‘.jpg‘){
                return array(‘file_name‘=>‘‘,‘save_path‘=>‘‘,‘error‘=>3);
            }
            $filename=time().$ext;
        }
        if(0!==strrpos($save_dir,‘/‘)){
            $save_dir.=‘/‘;
        }
//创建保存目录
        if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
            return array(‘file_name‘=>‘‘,‘save_path‘=>‘‘,‘error‘=>5);
        }
//获取远程文件所采用的方法
        if($type){
            $ch=curl_init();
            $timeout=5;
            curl_setopt($ch,CURLOPT_URL,$url);
            curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
            curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
            $img=curl_exec($ch);
            if($img==false)
            {
                return array(‘file_name‘=>‘‘,‘save_path‘=>‘‘,‘error‘=>6);
            }
            curl_close($ch);
        }else{
            ob_start();
            readfile($url);
            $img=ob_get_contents();
            ob_end_clean();
        }
//$size=strlen($img);
//文件大小
        $fp2=@fopen($save_dir.$filename,‘a‘);
        fwrite($fp2,$img);
        fclose($fp2);
        unset($img,$url);
        return array(‘file_name‘=>$filename,‘save_path‘=>DS.$filePath,‘error‘=>0);
    }

  

2、获取编辑器里的内容,使用上面的方法替换编辑器里的内容

  

技术图片
 /*保存远程图片到本地*
    @param $content 编辑器里的内容
    @return $content  返回替换过的内容
    */
    protected  function  getRempotePicToLocation($content)
    {
      preg_match_all(/<img[^"]+src="(http[^"]+)"/,$content,$matches);
      if($matches)
      {
          $imgList=$matches[1];
          foreach ($imgList as $matche)
          {
          /*得到当前文件的文件名和扩展名*/
                 preg_match(//([^/]+.[a-z]+)[^/]*$/,$matche,$fileInfo);
                 $info=$this->getImage($matche,$fileInfo[1],0);
                 if($info[error]==0)
                 {
                     $content=str_replace($matche,$info[save_path].DS.$info[file_name],$content);
                 }

          }

      }
   return $content;
    }
View Code

 

以上是关于php 保存编辑器内容中的远程图片为本地图片的主要内容,如果未能解决你的问题,请参考以下文章

PHP抓取远程图片到本地保存

php保存远程图片到本地

php PHP下载远程图片保存到本地

php下保存远程图片到本地的函数

php最强下载远程图片到本地代码

dede不能下载远程图片及如何实现图片本地化的方法