2013-08-28 69 views
0

我有一個包含圖像的目錄,我需要檢查joomla數據庫中某個表的特定列,以查看哪些文件存在於目錄中但不存在於數據庫中並刪除它們。將目錄內容與Joomla中的數據庫列進行比較

什麼我試過到目前爲止所有

我的代碼沒有工作是這個

$dir = 'directory/of/files'; 
$files1 = scandir($dir); 

$db =& JFactory::getDBO(); 
$query = "SELECT image FROM #__tablename WHERE something LIKE 'something else'"; 
$db->setQuery($query); 
$result = $db->loadResultArray(); 

foreach ($files1 as $file) { 

if (stripos($result, $file) === false) {echo 'file '.$file.' does not exist in  database '; unlink($dir.$file);} 
else {echo 'file '.$file.' exists in db ';} 

} 

任何想法?

預先感謝您

回答

0

這是我終於成功地寫,做我需要

$preImagePath = 'some/path/'; 
$fullImagePath = $params->get('extra1');//more of the path 

$value = $params->get('extra3'); 

$initfile = scandir($preImagePath.$fullImagePath); 
$files1 = array_diff($initfile, array('.', '..')); 

$db =& JFactory::getDBO(); 
$query = "SELECT image FROM #__table WHERE column LIKE '".$value."'"; 
$db->setQuery($query); 
$results = $db->loadObjectList(); 

foreach ($results as $result) { 
$imagearray .= $result->image.' '; 
} 

foreach ($files1 as $file) { 
if (strpos($imagearray, $fullImagePath.$file) === false) {    unlink($preImagePath.$fullImagePath.$file); } 
} 
1

您的問題是,在if(stripos($result, $file)),$結果是一個數組,而不是字符串。打開Joomla Configuration中的錯誤報告來查看這個。你應該看到一個消息,如:

Warning: stripos() expects parameter 1 to be string 

不過,我建議以下變化,因爲它是有點清潔:

$dir = 'directory/of/files'; 
$files1 = scandir($dir); 

$db = JFactory::getDBO(); 
$query = "SELECT image FROM #__tablename WHERE something LIKE 'something else'"; 
$db->setQuery($query); 
$result = $db->loadResultArray(); 

$diff = array_diff($files1, $result); 
// print_r($diff);die; 

foreach ($diff as $file) { 
    unlink($dir.$file); 
} 

取消對print_r首先要檢查它是你想要的。

+0

看起來像它會做的伎倆代碼。此刻我正在重新加載圖像,因爲我之前的嘗試最終刪除了所有文件。將盡快對結果發表評論。非常感謝你 – sakattack

+0

它會拋出一個錯誤:可捕捉的致命錯誤:類stdClass的對象無法轉換爲字符串 – sakattack

+0

錯誤在$ diff = array_diff($ files1,$ result);行 – sakattack

相關問題