• PHP学习笔记(4)文章中的图片处理


    array_diff($arr1,$arr2)
    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[0];
      if(!empty($temp[0]))
      {
       for($i=0;$i<count($temp);$i++)
       {
        $imgs[$i] = pathinfo($temp[$i]);
        $imgs[$i] = $imgs[$i]['basename'];
       }
       return $imgs;
      }
      else
      {
       return false;
      }
     }

    对正则进行下解释,先匹配http四个字母然后匹配非数字的字符若干个.匹配数字字符至
    少一个,匹配点(.)一个,匹配以jpggifpng结尾从$congtent中查找.结果存入$temp.
    将数据库中的原始数据中的图片保存在数组中.命名为$oldimgs
    这个地方我觉得应该改进下,存入后打印出来是二维数组.用起来有点费事
    :我的图片名称是类似于这个样子命名的:"201111291322589013.jpg"
    第二步:
    从用户提交过来的内容中找到所有的图片方法如上.得到数组二命名为$newimgs
    arr1arr2求差集方法如下
    --
    也就是说如果原始数据中的图片不存在于用户新提交的内容中.那么将删除这个图片.

       $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<count($diff);$i++)
         {
          $this->delimg($diff[$i],ARTICLE_IMG_DIR);
         }
        }
       }


    删除图片的方法如下 很简单.

     public function delimg($imgname,$dir)
     {
      @unlink($dir.'/'.$imgname);
      return true;
     }


    这样我的目的就达到了.当用户编辑了带有图片的文章.如果删除了图片.那么相应的图片也会从网站上删除
    得到文章中的图片名称的方法还可以应用到删除文章的过程中.
    在删除图片的方法中的$dir可以用realpath(__FILE__)加上各种"./""../"去给出图片目录相对于网站的目录
    对于得到html中的路径这里的正则写的不是很好.有待研究.最近发现一本正则的书.很不错
    精通正则表达式第三版  Jeffrey E.F. Friedl著 ,余晟(cheng)

  • 相关阅读:
    spring boot 2.1学习笔记【五】SpringBootTest单元测试及日志
    Java网络编程-UDP
    Java网络编程-TCP
    String的特性
    内存池的使用
    软件定时器的使用
    邮箱
    事件集
    线程优先级翻转
    临界区,互斥量与信号量
  • 原文地址:https://www.cnblogs.com/swordphp/p/2805066.html
Copyright © 2020-2023  润新知