0

我有一个包含图像的目录,我需要检查我的 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 ';}

}

有任何想法吗?

先感谢您

4

2 回答 2

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

于 2013-08-28T05:06:05.020 回答
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); }
}
于 2013-11-18T08:21:05.860 回答