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

摘要:
有时,从编辑器复制的图像是远程的,需要下载到本地服务器==strrpos){$save_dir.='/';}//如果(!

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

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、获取编辑器里的内容,使用上面的方法替换编辑器里的内容

  

php 保存编辑器内容中的远程图片为本地图片第1张php 保存编辑器内容中的远程图片为本地图片第2张
 /*保存远程图片到本地*
    @param $content 编辑器里的内容
    @return $content  返回替换过的内容
    */
    protected  function  getRempotePicToLocation($content)
    {
      preg_match_all('/<img[^"]+src="http://t.zoukankan.com/(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 保存编辑器内容中的远程图片为本地图片》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇oracle 11g在安装过程中出现监听程序未启动或数据库服务未注册到该监听程序汇编语言下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

解决ueditor二次加载(getEditor)加载失败的问题

最近在做项目的时候用到了ueditor控件,正常使用第一次加载没有问题,因为没有刷新页面,第二次加载的时候就会加载失败,ueditor部分出现空白,查看了一下功能基本可以定位到是getEditor时出现了问题,具体怎么解决直到我发现了下面的这篇博文,具体内容如下: 大家自己看看官方的js文件ueditor.all.js有以下的代码 /** * @...

php 访问java接口数据

$header = []; $header[] = 'Accept:application/json'; $header[] = 'Content-Type:application/json;charset=utf-8'; $data = $_GPC['mobile']; $ch = curl_init();...

APMServ5.2.6win10系统Apache、MySQL5.1启动失败解决办法

    今天想在本地测试网站源码能否正常运行,如果可以就转空间了,然而下载了APMServ之后发现系统Apache、MySQL5.1启动均失败,小白的人表示只能借助百度,用了一个小时的时间终于解决了,虽然坎坷,但还是欣慰,为了防止以后再发生类似的事情到处百度,还是决定把解决办法记录下来。     首先,在电脑左下角找到“运行”程序,输入“regedit”打...

ecshop第一讲之安装

  今天开始对Ectouch做一些研究,但是发现网上资源很少,而且官网对服务都需收费;并且提供的wiki、官方文档等都是空的,瞬间感觉,,,,后来开始海量搜索,最后发现只有论坛还有些东西可以看看,并对海量资源进行了有用性的分析整理。今天开始慢慢收录一些自己认为重要的、对理解有用的东西。如果后续相关内容对您的一些引用不当,请联系我修改   ectouch安装...

php的session

来源:http://blog.163.com/lgh_2002/blog/static/4401752620105246517509/ http协议是WEB服务器与客户 端(浏览器)相互通信的协议,它是一种无状态协议。所谓无状态,指的是不会维护http请求数据,http请求是独立的,非持久的。而越来越复杂的WEB 应用,需要保存一些用户状态信息。这时候,S...

PHP开发基础知识

PHP的学习 PHP脚本以<?php 开始 ?>结束 <?php //此处写代码 ? > php默认文件扩展名.php php文件通常包含HTML标签以及一些PHP脚本代码 “echo”是php输出函数,下面是一个简单例子 <!DOCTYPE html> <html> <body>   <h...