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