Unbenutzte Produktbilder löschen

07.04.2010   //   von Tobias Vogt   //   Entwicklung, Magento  //  4 Kommentare

Manchmal entstehen gerade beim Batch-Import von Produkten ein paar Bildleichen. Diese habe ich entfernen können in dem geprüft habe ob zu jeder Datei im Dateisystem ein Eintrag in der Datenbank besteht.

Das Script sollte in einem beliebigen Unterordner liegen. Im Standardaufruf wird nur geprüft ob es Bildleichen gibt – gelöscht wird nicht. Will man die unbenutzten Bilder auch löschen kann dies durch Anhängen ?remove=YES passieren.

<?php
require_once dirname(__FILE__).'/../app/Mage.php';
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

class cleanDir {

	protected $initDir;

	protected $freeSize = 0;

	function __construct($dir) {
		$this->initDir = $dir;
		$this->clean ( $dir );

		var_dump( $this->freeSize );
	}

	function clean( $dir ) {

		foreach(glob("$dir/*") AS $cur ) {

			if ( basename($cur) == '.' || basename($cur) == '..' ) {
				continue;
			}

			if ( is_dir($cur) ) {
				$this->clean( $cur );
			}

			if ( is_file($cur) ) {

				if( $this->isUsed( $cur ) ) {
					echo "<p style='color: green'>$cur wird behalten</p>";
				} else {

					$this->freeSize += filesize( $cur );

					if ( $_GET['remove'] == 'YES' ) {
						echo "<p style='color: gred'>$cur WURDE gelöscht</p>";
						unlink( $cur );
					} else {
						echo "<p style='color: gred'>$cur ist unnötig</p>";
					}

				}

			}

		}

	}

	function isUsed( $image ) {

		$image = str_replace( $this->initDir, '', $image );
		if ( $image[0] != '/' ) {
			$image = '/'.$image;
		}

		$db = Mage::getSingleton('core/resource')->getConnection('core_read');

		$stmt = $db->query( "SELECT COUNT(*) AS anz
              		FROM `catalog_product_entity_media_gallery`
              		WHERE `value` LIKE ?", array( $image ) );

 		if ( $res = $stmt->fetch() ) {
 			if ( $res['anz'] > 0 ) {
 				return true;
 			}
 		}

		return false;
	}

}

$cd = new cleandir( Mage::getBaseDir('media').DS.'catalog'.DS.'product'.DS );

Benutzung natürlich auf eine Gefahr :)

4 Kommentare

  • Hallo,
    super Skript, vielen Dank! :)

  • Danke schön, ich freue mich immer über Feedback :)

  • Haste sowas auch für WordPress zur Hand? ;)

  • Sorry, leider nicht..

Kommentar schreiben