php笔记之:文章中图片处理的使用


Posted in PHP onApril 26, 2013

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四个字母然后匹配非数字的字符若干个.匹配数字字符至
少一个,匹配点(.)一个,匹配以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<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)译

PHP 相关文章推荐
做一个有下拉功能的留言版
Oct 09 PHP
java EJB 加密与解密原理的一个例子
Jan 11 PHP
PHP中设置时区,记录日志文件的实现代码
Jan 07 PHP
php三维数组去重(示例代码)
Nov 26 PHP
PHP return语句的另一个作用
Jul 30 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
Sep 11 PHP
Thinkphp5+uploadify实现的文件上传功能示例
May 26 PHP
PHP创建XML接口示例
Jul 04 PHP
php5.6.x到php7.0.x特性小结
Aug 17 PHP
PHP的静态方法与普通方法用法实例分析
Sep 26 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
Sep 30 PHP
yii框架数据库关联查询操作示例
Oct 14 PHP
php笔记之:初探PHPcms模块开发介绍
Apr 26 #PHP
input file获得文件根目录简单实现
Apr 26 #PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
Apr 26 #PHP
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 #PHP
关于二级目录拖拽排序的实现(源码示例下载)
Apr 26 #PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
Apr 26 #PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
Apr 26 #PHP
You might like
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
js如何获取兄弟、父类等节点
2014/01/06 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
javascript设计模式之解释器模式详解
2014/06/05 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
python将一组数分成每3个一组的实例
2018/11/14 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
Python搭建代理IP池实现获取IP的方法
2019/10/27 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
python和go语言的区别是什么
2020/07/20 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
三八红旗手先进事迹材料
2014/05/13 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
名人传读书笔记
2015/06/26 职场文书
2015年民兵整组工作总结
2015/07/24 职场文书