将目录内容与Joomla中的数据库列进行比较

时间:2013-08-28 04:33:35

标签: php sql 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 ';}

}

有什么想法吗?

提前谢谢

2 个答案:

答案 0 :(得分:1)

你的问题是在if(stripos($result, $file))中,$ result是一个数组,而不是一个字符串。打开Joomla配置中的错误报告以查看此信息。您应该看到如下消息:

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以检查它是否是您想要的。

答案 1 :(得分: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); }
}