Я тут немного поколдовал и предложу немного усовершенствованный скрипт, в нем теперь хоть есть обработка ошибок, в случае если ничего не найдено и вывод количественных результатов в случае успеха.
Также можно переключиться с продуктов на категории, поменяв в первой строке переменную
$type.
Инструкция не нужна, как спрашивал товарищ:
Нужно создать php-файл и запихнуть в него скрипт. Запустить через браузер.
И, да, он работает на 3й версии Virtuemart тоже.
PHP:
<?
$type = 'product'; // type of image: "product" or "category"
$imgPath = $_SERVER['DOCUMENT_ROOT']."/images/stories/virtuemart/$type/"; // default path to full-sized images
$resizedPath = $_SERVER['DOCUMENT_ROOT']."/images/stories/virtuemart/$type/resized/"; // default path to thumbnail images
set_time_limit(0);
require $_SERVER['DOCUMENT_ROOT'].'/configuration.php';
$conf = new JConfig;
$db = new mysqli($conf->host, $conf->user, $conf->password, $conf->db);
$images = array_slice(scandir($imgPath), 2);
$resized = array_slice(scandir($resizedPath), 2);
$query="SELECT
virtuemart_media_id,
file_url,
file_url_thumb
FROM {$conf->dbprefix}virtuemart_medias
WHERE virtuemart_media_id IN(SELECT DISTINCT virtuemart_media_id FROM {$conf->dbprefix}virtuemart_{$type}_medias)";
$res = $db->query($query);
if (!$res) die("Cannot get database resource!");
while($r = $res->fetch_array()){
$activeID[] = $r[0];
$p = pathinfo($r[1]);
$activeImg[] = $p['basename'];
$p = pathinfo($r[2]);
$activeResized[] = $p['basename'];
}
if (!is_null($activeImg)){
$notActiveImg = array_diff($images, $activeImg);
};
if (!is_null($activeResized)){
$notActiveResized = array_diff($resized, $activeResized);
}
if (!is_null($activeID)){
$db->query("DELETE FROM {$conf->dbprefix}virtuemart_medias WHERE file_type='$type' AND virtuemart_media_id NOT IN(".implode(',', $activeID).")");
}
$db->close();
$full=0;
$thumb=0;
if (!is_null($activeImg)){
foreach($notActiveImg as $i){
if(is_file($imgPath.$i) && $i != 'index.html'){
if (unlink($imgPath.$i)) $full++; else echo "Cannot delete $imgPath$i<br>";
} else "File not exists $imgPath.$i<br>";
}
}
if (!is_null($activeResized)){
foreach($notActiveResized as $i){
if(is_file($resizedPath.$i) && $i != 'index.html'){
if (unlink($resizedPath.$i)) $thumb++; else echo "Cannot delete $imgPath$i<br>";
} else "File not exists $imgPath.$i<br>";
}
}
if ($full>0) echo "Deleted $full full-sized images<br>";
if ($thumb>0) echo "Deleted $thumb thumbnail images<br>";
if ($full==0 && $thumb==0) echo "Nothing to delete";
?>
Готовый файлик прилагается.