PHP正则表达式处理img的地址
今天更新了,CAIcms中的article中的删除,之前一直没有对article中的图片进行删除
首先包含本身字段的删除,当然也包含对body的删除。
使用unlink可以对物理地址进行删除。
在CI框架中,主要使用了正则,在删除文章的时候进行删除body中的src路径。
preg_match_all('/<img((?!src).)*src[\s]*=[\s]*[\'"](?<src>[^\'"]*)[\'"]/i',$row_data['body'],$match);
主要是这句,我们需要得到的是src的地址,这样通过vardump很容易得到。
贴出这个方法。
我的文章都存在了articles和article_data里面。
public function delete($id) { if ( empty($id) ) exit(); $row = $this->db->select('pic')->where('id',$id)->get($this->table1)->row_array(); if ( !empty($row['pic']) ) unlink(".".$row['pic']); $res = $this->db->delete($this->table1,array('id'=>$id)); $row_data = $this->db->select('body')->where('aid',$id)->get($this->table2)->row_array(); preg_match_all('/<img((?!src).)*src[\s]*=[\s]*[\'"](?<src>[^\'"]*)[\'"]/i',$row_data['body'],$match); if ( is_array($match[2]) and count($match[2]) > 0 ) { foreach ($match[2] as $v) { unlink(".".$v); } } $res_data = $this->db->delete($this->table2,array('aid'=>$id)); return 1; }
由于match得到的是一个2维数组,所以要仔细判断。这里match[2]即为我们希望得到的数据。
然后循环删除之。结束。
一个疑问,如果对方很蛋疼的使用退格键,就没有办法处理这种情况。
如果想继续处理,就需要最后,把所有的body重新遍历一遍,然后进行注意对比,然后再删除,从物理路径去考虑。
还有第二个疑问,如果对方是网络路径,那么,这个正则还需要进行变形。
if ( is_array($match[2]) and count($match[2]) > 0 ) { foreach ($match[2] as $v) { if (strpos($v, 'http')) continue; unlink(".".$v); } }
结束。
发布时间:2018-04-25,18:20:56
删除文章的同时删除文中的图片地址。