- public function getimgsinarticle($content)
- {
- $temp = array();
- $imgs = array();
- preg_match_all('/http[^\d]*[\d]+[\.](jpg|gif|png)/',$content,$temp);
- $temp = $temp[0];
- if(!empty($temp[0]))
- {
- for($i=0;$i {
- $imgs[$i] = pathinfo($temp[$i]);
- $imgs[$i] = $imgs[$i]['basename'];
- }
- return $imgs;
- }
- else
- {
- return false;
- }
- }
以上用到了正则表达式,解释下:先匹配http四个字母然后匹配非数字的字符若干个。
匹配数字字符至少一个,匹配点(.)一个,匹配以jpg或gif或png结尾从$congtent中查找。结果存入$temp中。
将数据库中的原始数据中的图片保存在数组中,命名为$oldimgs。
此处需要改进下,存入后打印出来是二维数组,用起来有点费事。
说明,我的图片名称是类似于这个样子命名的:"201111291322589013.jpg"
第二步:
从用户提交过来的内容中找到所有的图片方法如上.得到数组二命名为$newimgs
对arr1和arr2求差集方法如下
--也就是说如果原始数据中的图片不存在于用户新提交的内容中.那么将删除这个图片.
- $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=0;$i {
- $this->delimg($diff[$i],ARTICLE_IMG_DIR);
- }
- }
- }
删除图片:
- public function delimg($imgname,$dir)
- {
- @unlink($dir.'/'.$imgname);
- return true;
- }
当用户编辑了带有图片的文章.如果删除了图片.那么相应的图片也会从网站上删除,得到文章中的图片名称的方法还可以应用到删除文章的过程中。
在删除图片的方法中的$dir可以用realpath(__FILE__)加上各种"./""../"去给出图片目录相对于网站的目录。 |