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



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..