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";
} else {
$this->freeSize += filesize( $cur );
if ( $_GET['remove'] == 'YES' ) {
echo "<p style='color: gred'>$cur WURDE gelöscht";
unlink( $cur );
} else {
echo "<p style='color: gred'>$cur ist unnötig";
}
}
}
}
}
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 :)