• 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
  • 相关阅读:
    jsp实现登陆功能小实验
    netty
    shiro
    mybatis
    spring MVC
    spring
    集合框架面试题
    Redis面试题
    Dubbo面试题汇总
    阿里面试题
  • 原文地址:https://www.cnblogs.com/fogwang/p/12580318.html
Copyright © 2020-2023  润新知