array_diff($arr$arr)
php数组函数之一用来计算数组的差集
正则匹配html图片标签
用sinaeditor添加的图片删除操作
用法之一今天晚上在用新浪编辑器发表文章的过程中
使用到了此函数
问题描述:
文章中有图片若干在增加文章的过程中自动上传到网站的图片目录中
在修改文章的过程中如果对图片进行相关的删除操作那么虽然在代码中(已经存入数据库);
已经删除了数据的标签类似于<img src=http://>这样的标签但是图片的文件依旧存在于
网站上这时候需要一定的处理
处理办法:
首先:从数据库中得到原始的文章内容
从里面得到图片的文件名
用到了正则
方法如下
代码如下:
public function getimgsinarticle($content)
{
$temp = array();
$imgs = array();
preg_match_all(
/http[^d]*[d]+[
](jpg|gif|png)/
$content
$temp);
$temp = $temp[
];
if(!empty($temp[
]))
{
for($i=
;$i<count($temp);$i++)
{
$imgs[$i] = pathinfo($temp[$i]);
$imgs[$i] = $imgs[$i][
basename
];
}
return $imgs;
}
else
{
return false;
}
}
对正则进行下解释先匹配http四个字母然后匹配非数字的字符若干个匹配数字字符至
少一个匹配点()一个匹配以jpg或gif或png结尾从$congtent中查找结果存入$temp中
将数据库中的原始数据中的图片保存在数组中命名为$oldimgs
这个地方我觉得应该改进下存入后打印出来是二维数组用起来有点费事
注:我的图片名称是类似于这个样子命名的:"jpg"
第二步:
从用户提交过来的内容中找到所有的图片方法如上得到数组二命名为$newimgs
对arr和arr求差集方法如下
也就是说如果原始数据中的图片不存在于用户新提交的内容中那么将删除这个图片
代码如下:
$oldimgs = $this
>getimgsinarticle($oldarticledata[
article_content
]);
$newimgs = $this
>getimgsinarticle($data[
articlecontent
]);
//print_r($newimgs);
$newimgs = empty($newimgs)?array():$newimgs;
if($oldimgs!=false)
{
$diff = array_diff($oldimgs
$newimgs);
$diff = array_values($diff);
if(!empty($diff))
{
for($i=
;$i<count($diff);$i++)
{
$this
>delimg($diff[$i]
ARTICLE_IMG_DIR);
}
}
}
删除图片的方法如下 很简单
代码如下:
public function delimg($imgname
$dir)
{
@unlink($dir
/
$imgname);
return true;
}
这样我的目的就达到了当用户编辑了带有图片的文章如果删除了图片那么相应的图片也会从网站上删除
得到文章中的图片名称的方法还可以应用到删除文章的过程中
在删除图片的方法中的$dir可以用realpath(__FILE__)加上各种"/""/"去给出图片目录相对于网站的目录
对于得到html中的路径这里的正则写的不是很好有待研究最近发现一本正则的书很不错