熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

php文章中圖片處理的使用

2013-11-15 12:34:31  來源: PHP編程 

  array_diff($arr$arr)

  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[];
if(!empty($temp[]))
{
for($i=;$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
這個地方我覺得應該改進下存入後打印出來是二維數組用起來有點費事
注:我的圖片名稱是類似於這個樣子命名的:"jpg"

  第二步:
從用戶提交過來的內容中找到所有的圖片方法如上得到數組二命名為$newimgs
對arr和arr求差集方法如下
也就是說如果原始數據中的圖片不存在於用戶新提交的內容中那麼將刪除這個圖片

代碼如下:
$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=;$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中的路徑這裡的正則寫的不是很好有待研究最近發現一本正則的書很不錯


From:http://tw.wingwit.com/Article/program/PHP/201311/21206.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.