我有一个带有图像的目录,我需要检查我的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 :(得分: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); }
}