Magento rimuove le immagini dei prodotti eliminati

Pulisci le immagini Magento non utilizzate

Magento purtroppo non rimuove le immagini di un prodotto purtroppo se il prodotto viene rimosso. Lo script seguente controlla tutte le immagini e verifica se sono ancora presenti nel database di Magento. In caso contrario, elimina l'immagine. Utilizza il seguente codice:

setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

set_time_limit(0);
ini_set('memory_limit','1024M');

$media = Mage::getBaseDir('media').'/catalog/product';

echo "Query database for images …\n";
$query = "SELECT value FROM catalog_product_entity_media_gallery";
$data = Mage::getSingleton('core/resource')->getConnection('core_read')->fetchAll($query);

$dbData=array();
foreach($data as $item){
  $dbData[$item['value']]=$item['value'];
}

echo "Images found in database:".count($dbData)."\n";

echo "Search images in media directory …\n";
$images = findFiles($media, array('jpg'));
echo "Images found under directory ($media):".count($images['jpg'])."\n";

echo "Start removing images …\n";
$removedCount=0;
$skippedCount=0;
foreach($images['jpg'] as $image) {
  if(strpos($image,'cache')!==false)
  {
    //echo "Skip cached image : $image\n";
    continue;
  }

  $imageCleanup = str_replace($media,"",$image);
  if(isset($dbData[$imageCleanup]))
  {
    echo "Skip image is in database : $image\n";
    $skippedCount++;
    continue;
  }
  else
  {
    echo "Remove image : $image\n";
    //if($testrun==false) unlink($image);
    $removedCount++;
  }
}

echo "Done, removed $removedCount images and skipped $skippedCount images.\n";

function findFiles($directory, $extensions = array()) {
  function glob_recursive($directory, &$directories = array()) {
    foreach(glob($directory, GLOB_ONLYDIR | GLOB_NOSORT) as $folder) {
      $directories[] = $folder;
      glob_recursive("{$folder}/*", $directories);
    }
  }
  glob_recursive($directory, $directories);
  $files = array ();
  foreach($directories as $directory) {
  foreach($extensions as $extension) {
  foreach(glob("{$directory}/*.{$extension}") as $file) {
  $files[$extension][] = $file;
}
}
}
return $files;
}

?>

🤓😎 Sempre più persone stanno ricevendo i nostri consigli su Geek, Privacy, Sviluppo e Stile di Vita

Vuoi ricevere gli ultimi blog su Geek, Privacy, Sviluppo e Lifestyle? Iscriviti alla nostra newsletter.

Pulisci lo spazio di Magento: potresti risparmiare un sacco di GB

Nel mio caso, ho provato lo script per un archivio con 40K immagini di cui 10K non sono state utilizzate. Si tratta di una riduzione di spazio su disco di alcuni Gigabyte.

Parola finale

Questo script è grazie a un commento su Commercio rapido. Se usi lo script, è sotto la tua responsabilità. Provalo su un server di staging e fai un backup in anticipo. Salute!

Ultimo aggiornamento il 26 gennaio 2015

6 commenti su “Magento remove images of deleted products”

  1. Ciao, utilizzo lo script con il nome delete.php alla radice, per eseguirlo con il browser, viene visualizzato che i file sono stati esclusi, ma sono ancora presenti!

    1. Modifica

      altro
      {
      echo “Rimuovi immagine: $image\n”;
      //if($testrun==false) unlink($image);
      $removedCount++;
      }

      A

      altro
      {
      echo “Rimuovi immagine: $image\n”;
      unlink($immagine);
      $removedCount++;
      }

  2. ciao, ho questo errore

    Interroga il database per le immagini …
    Errore fatale: eccezione non rilevata 'PDOException' con messaggio 'SQLSTATE[42S02]: tabella di base o vista non trovata: 1146 La tabella 'muslimas_mage958.catalog_product_entity_media_gallery' non esiste' in /home/muslimas/public_html/lib/Zend/Db/Statement/Pdo.php:228 Stack trace: #0 /home/muslimas/public_html/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array) #1 /home/muslimas/public_html/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array) #2 /home/muslimas/public_html/app/code/core/Zend/Db/Statement.php(291): Varien_Db_Statement_Pdo_Mysql->_execute(Array) #3 /home/muslimas/public_html/lib/Zend/Db/Adapter/Abstract.php(480): Zend_Db_Statement->execute(Array) #4 /home/muslimas/public_html/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('SELECT valore FR…', Array) #5 /home/muslimas/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(504): Zend_Db_Adapter_Pdo_Abstract->query('SELECT valore FR…', Array) #6 /home/muslimas/public_html/lib/Zend/Db/Adapter/Abstract.php(737): in /home/muslimas/public_html/lib/Zend/Db/Statement/Pdo.php alla riga 235

    1. Potresti avere un prefisso tablename del database. Lo script non sta usando la funzione integrata per ottenere il nome della tabella, quindi non c'è alcun prefisso. Prova a sostituire il nome della tabella con Mage::getSingleton('core/resource')->getTableName('catalog_product_entity_media_gallery')

  3. Ha funzionato perfettamente, grazie per la condivisione!
    Molto più efficiente da gestire rispetto a qualsiasi altro modulo che non riesce a gestire grandi quantità di immagini di prodotti.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

it_ITItaliano
Scorri verso l'alto