Если Вам часто приходится работать с товарами в Virtuemart 2, то Вы наверняка знаете, что после удаление товара, само изображение с сайта не удаляется, что в свою очередь зачастую приводит к заполнению дискового пространства сайта ненужными файлами. Лично у меня необходимость удалить ненужные картинки появилась после того, как несколько раз не удачно импортировал товары, потом поменял настройки импорта и изображения размножились, короче не важно, вот Вам скрипт, который позволит удалить эти изображения:
<?php $type = 'product'; $imgPath = $_SERVER['DOCUMENT_ROOT'].'/images/stories/virtuemart/product/'; $resizedPath = $_SERVER['DOCUMENT_ROOT'].'/images/stories/virtuemart/product/resized/'; 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);
$res = $db->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)");
var_dump($res); die;
while($r = $res->fetch_array()){
$activeID[] = $r[0];
$p = pathinfo($r[1]);
$activeImg[] = $p['basename'];
$p = pathinfo($r[2]);
$activeResized[] = $p['basename'];
}
$notActiveImg = array_diff($images, $activeImg);
$notActiveResized = array_diff($resized, $activeResized);
$db->query("DELETE FROM {$conf->dbprefix}virtuemart_medias WHERE file_type='$type' AND virtuemart_media_id NOT IN(".implode(',', $activeID).")");
$db->close();
foreach($notActiveImg as $i){
if(is_file($imgPath.$i) && $i != 'index.html')
unlink($imgPath.$i);
}
foreach($notActiveResized as $i){
if(is_file($resizedPath.$i) && $i != 'index.html')
unlink($resizedPath.$i);
}
Сразу хочу предупредить, что если изображений много, скрипту понадобится много времени для выполнения. Так, что позаботьтесь об этом, изменив настройки php, на примерно с 30 секунд до 15 минут или запускайте через консоль.
У мну ошибка(
object(mysqli_result)#3 (5) { [«current_field»]=> int(0) [«field_count»]=> int(3) [«lengths»]=> NULL [«num_rows»]=> int(899) [«type»]=> int(0) }