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

doupoo 2020-03-27

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

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);
//文件大小
        ($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;
    }

相关推荐