Magento entfernt Bilder gelöschter Produkte

Nicht verwendete Magento-Bilder bereinigen

Magento entfernt leider keine Bilder eines Produkts, wenn das Produkt entfernt wird. Das folgende Skript überprüft alle Bilder und prüft, ob sie noch in der Datenbank von Magento vorhanden sind. Wenn nicht, löscht es das Bild. Verwenden Sie den folgenden Code:

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;
}

?>

Magento-Speicherplatz aufräumen: könnte viele GBs sparen

In meinem Fall habe ich das Skript für einen Store mit 40.000 Bildern ausprobiert, von denen 10.000 nicht verwendet wurden. Dies entspricht einer Speicherplatzreduzierung von einigen Gigabyte.

Letztes Wort

Dieses Skript ist einem Kommentar zu verdanken. RapidCommerce. Wenn du das Skript verwendest, geschieht das auf eigene Verantwortung. Probiere es auf einem Staging-Server aus und erstelle vorher ein Backup. Prost!

6-Gedanken zu „Magento remove images of deleted products“

  1. Hallo, ich verwende das Skript mit dem Namen delete.php im Stammverzeichnis, um es mit dem Browser auszuführen. Es wird angezeigt, dass die Dateien ausgeschlossen wurden, aber sie sind immer noch darin enthalten!

    1. Ändern

      anders
      {
      echo „Bild entfernen: $image\n“;
      //wenn($testrun==false) unlink($image);
      $removedCount++;
      }

      Zu

      anders
      {
      echo „Bild entfernen: $image\n“;
      Verknüpfung aufheben ($image);
      $removedCount++;
      }

  2. hallo, ich bekomme diesen Fehler

    Datenbank nach Bildern abfragen …
    Schwerwiegender Fehler: Nicht abgefangene Ausnahme „PDOException“ mit der Meldung „SQLSTATE[42S02]: Basistabelle oder Ansicht nicht gefunden: 1146 Tabelle „muslimas_mage958.catalog_product_entity_media_gallery“ existiert nicht“ in /home/muslimas/public_html/lib/Zend/Db/Statement/Pdo.php:228 Stapelüberwachung: #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-Wert FR…', Array) #5 /home/muslimas/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(504): Zend_Db_Adapter_Pdo_Abstract->query('SELECT-Wert 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 in Zeile 235

    1. Möglicherweise haben Sie ein Präfix für den Datenbanktabellennamen. Das Skript verwendet nicht die integrierte Funktion zum Abrufen des Tabellennamens, daher gibt es kein Präfix. Versuchen Sie, den Tabellennamen durch Mage::getSingleton('core/resource')->getTableName('catalog_product_entity_media_gallery') zu ersetzen.

  3. Hat perfekt funktioniert, danke fürs Teilen!
    Lässt sich viel besser ausführen als alle anderen Modulangebote, die nicht wirklich mit großen Mengen an Produktbildern umgehen können.

Einen Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEDeutsch
Nach oben blättern