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; }