欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php处理文章中图片的方法

程序员文章站 2022-06-05 16:15:07
...
  1. public function getimgsinarticle($content)
  2. {
  3. $temp = array();
  4. $imgs = array();
  5. preg_match_all('/http[^\d]*[\d]+[\.](jpg|gif|png)/',$content,$temp);
  6. $temp = $temp[0];
  7. if(!empty($temp[0]))
  8. {
  9. for($i=0;$i {
  10. $imgs[$i] = pathinfo($temp[$i]);
  11. $imgs[$i] = $imgs[$i]['basename'];
  12. }
  13. return $imgs;
  14. }
  15. else
  16. {
  17. return false;
  18. }
  19. }
复制代码

以上用到了正则表达式,解释下:先匹配http四个字母然后匹配非数字的字符若干个。 匹配数字字符至少一个,匹配点(.)一个,匹配以jpg或gif或png结尾从$congtent中查找。结果存入$temp中。 将数据库中的原始数据中的图片保存在数组中,命名为$oldimgs。

此处需要改进下,存入后打印出来是二维数组,用起来有点费事。

说明,我的图片名称是类似于这个样子命名的:"201111291322589013.jpg"

第二步: 从用户提交过来的内容中找到所有的图片方法如上.得到数组二命名为$newimgs 对arr1和arr2求差集方法如下 --也就是说如果原始数据中的图片不存在于用户新提交的内容中.那么将删除这个图片.

  1. $oldimgs = $this->getimgsinarticle($oldarticledata['article_content']);
  2. $newimgs = $this->getimgsinarticle($data['articlecontent']);
  3. //print_r($newimgs);
  4. $newimgs = empty($newimgs)?array():$newimgs;
  5. if($oldimgs!=false)
  6. {
  7. $diff = array_diff($oldimgs,$newimgs);
  8. $diff = array_values($diff);
  9. if(!empty($diff))
  10. {
  11. for($i=0;$i {
  12. $this->delimg($diff[$i],ARTICLE_IMG_DIR);
  13. }
  14. }
  15. }
复制代码

删除图片:

  1. public function delimg($imgname,$dir)
  2. {
  3. @unlink($dir.'/'.$imgname);
  4. return true;
  5. }
复制代码

当用户编辑了带有图片的文章.如果删除了图片.那么相应的图片也会从网站上删除,得到文章中的图片名称的方法还可以应用到删除文章的过程中。

在删除图片的方法中的$dir可以用realpath(__FILE__)加上各种"./""../"去给出图片目录相对于网站的目录。