1. 编辑器上传的图片默认是在项目目录下,图片地址是相对路径:
<img src="/public/temp/upload/20190125/1548385742_7.png" alt="一起来飞车" />
2. 现在需求是提交表单时把编辑器中的本地图片上传到FTP,并修改对应图片路径为绝对路径,即http/https开头的:
<img src="http://www.image.com/public/temp/upload/20190125/1548385742_7.png" alt="一起来飞车" />
思路:用正则匹配内容中的所有相对路径的img标签,PHP函数 preg_match_all() ,然后循环上传每一张图片到FTP,并用PHP函数 str_replace() 替换对应图片地址,最后返回文章内容。
3. 示例代码(CI框架):
/**
* @Explain: ftp上传编辑器提交过来的图片
* @Param: $content 编辑器内容
*/
public function ueditorUpload($content){
$config = $this->config->config;
$content = stripslashes($content);
$imgArray = array();
//匹配相对路径的图片
$regular = '/<\s*img\s+[^>]*?src\s*=\s*(\'|\")(\/.*?)\\1[^>]*?\/?\s*>/i';
preg_match_all($regular, $content, $imgArray);
$imgArray = array_unique($imgArray[2]);
if($imgArray){
$this->ftpUpload();
foreach ($imgArray as $k => $val) {
$imgFiles = $_SERVER['DOCUMENT_ROOT'].$val;
$pathArr = explode('/', $val);
$imgname = $pathArr[5];
$picpath = 'imgfile/'.date('Ym').'/'.date('d');
$picurlpath = date('Ym').'/'.date('d');
$this->ftp->rec_mkdir($picpath); //递归创建目录
$bool = $this->ftp->upload($imgFiles, $picpath.'/'.$imgname);
if($bool){
$content = str_replace($val, $config['image_url'].$picurlpath.'/'.$imgname, $content);
}
}
$this->ftp->close(); //关闭ftp
}
return $content;
}
大神们如有更好的方法欢迎留言^_^