Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save memoryleak/e85093e74068394f38ff8469ee267505 to your computer and use it in GitHub Desktop.
Save memoryleak/e85093e74068394f38ff8469ee267505 to your computer and use it in GitHub Desktop.
Remove duplicate product images

Introduction

This is a Magento 1.x shell script that goes trough all the products and tries to identify duplicate images from the media gallery.

Caution

A check to not remove base image was not built in.

<?php
require 'abstract.php';
/**
* @category Shell
* @package Nudorm
* @author Haydar Ciftci <[email protected]>
* @copyright 2016 Nudorm
*/
class Nudorm_Deduplicate_Product_Images extends Mage_Shell_Abstract
{
/**
* @var Mage_Catalog_Model_Resource_Product_Collection
*/
protected $productsCollection = array();
/**
* @var Mage_Catalog_Model_Product_Attribute_Media_Api
*/
protected $mediaApi;
/**
* Run script
*/
public function run()
{
$this->productsCollection = Mage::getModel('catalog/product')->getCollection();
$this->mediaApi = Mage::getModel("catalog/product_attribute_media_api");
foreach ($this->productsCollection as $dirtyProduct) {
/** @var Mage_Catalog_Model_Product $product */
$product = Mage::getModel('catalog/product')->load($dirtyProduct->getId());
$mediaGalleryImages = $product->getMediaGalleryImages();
if ($mediaGalleryImages) {
$md5sums = array();
foreach ($mediaGalleryImages as $galleryImage) {
$imagePath = Mage::getBaseDir('media') . '/catalog/product' . $galleryImage->getFile();
$md5sum = md5(file_get_contents($imagePath));
if (in_array($md5sum, $md5sums)) {
$this->mediaApi->remove($product->getId(), $galleryImage->getFile());
Mage::log('Removed ' . $galleryImage->getFile() . ' from product ' . $product->getId(), null, 'dedupe.log');
} else {
$md5sums[] = $md5sum;
}
}
}
}
}
}
$dedupe = new Nudorm_Deduplicate_Product_Images();
$dedupe->run();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment