Unbenutzte Produktbilder löschen
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
Der Autor
Tobias Vogt arbeitet seit 2008 mit Magento und ist seit 2011 durch Magento zertifizierter Entwickler. Beschäftigt ist er bei der code-x GmbH, einer Agentur für Internet und Marketing aus Paderborn. Er gehört zum Gründer-Team der Webguys und ist seit November 2011 Bachelor of Science (Wirtschaftsinformatik). Sie erreichen Ihn per E-Mail unter tobi@webguys.de.




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..
Wirklich klasse Skript. Es werden sämtliche (in meinem Fall sagenhafte 721361108) unbenutzte Bilddateien mit Pfad angezeigt.
Leider bin ich noch nicht dahinter gekommen wo ich den Codeschnipsel “?remove=YES” genau anhängen muss. Vielen Dank!
Hey Haiko,
das Script ist schon etwas älter. Pass auf das es mit aktuellen Magento-Versionen noch einwandfrei läuft! remove=yes must du einfach an das eigentlich Script anhängen. Also deinScript.php?remove=yes
Tobi
Hallo Tobias,
vielen Dank für dein tolles Skript. Es läuft bei mir problemlos unter Magento 1.7.0.2, lediglich die Zeile “require_once dirname(__FILE__).’/../app/Mage.php’;” musste ich in “require_once ‘/../app/Mage.php’;” (mein prg liegt in root) ändern (kennt 1.7.0.2 den Befehl dirname… nicht mehr?).
Nochmal vielen Dank für deine Hilfe, Andreas