Magento tar bort bilder på raderade produkter

Rensa upp ej använda Magento-bilder

Magento tar tyvärr inte bort bilder på en produkt tyvärr om produkten tas bort. Följande skript kontrollerar alla bilder och kontrollerar om de fortfarande finns i databasen för Magento. Om inte, raderas bilden. Använd följande kod:

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

?>

🤓😎 Fler och fler människor får våra tips om nördar, integritet, utveckling och livsstil

Vill du få de senaste bloggarna om nördar, integritet, utveckling och livsstil? Prenumerera på vårt nyhetsbrev.

Rensa upp Magento-utrymme: kan spara många GB

I mitt fall provade jag skriptet för en butik med 40K bilder varav 10K inte användes. Detta är en minskning av diskutrymmet med några gigabyte.

Sista ord

Detta manus är tack vare en kommentar på RapidCommerce. Om du använder skriptet är det på ditt eget ansvar. Prova det på en staging-server och gör en säkerhetskopia i förväg. skål!

Senast uppdaterad 26 januari 2015

6 reaktioner på ”Magento remove images of deleted products”

  1. Hej, jag använder skriptet med delete.php-namnet i roten, för att köra med webbläsaren, det visas att filerna uteslöts, men de finns fortfarande i den!

    1. Ändra

      annan
      {
      echo "Ta bort bild : $image\n";
      //if($testrun==false) unlink($image);
      $removedCount++;
      }

      till

      annan
      {
      echo "Ta bort bild : $image\n";
      unlink($image);
      $removedCount++;
      }

  2. hej, jag får det här felet

    Frågedatabas för bilder...
    Fatalt fel: Oupptäckt undantag 'PDOException' med meddelandet 'SQLSTATE[42S02]: Bastabell eller vy hittades inte: 1146 Tabell 'muslimas_mage958.catalog_product_entity_media_gallery' existerar inte' i /home/muslimas/public_html/lib/Zend/Db.phcement:/Pdo8/trapement:/P28/trapement: #0 /home/muslimas/public_html/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->exekvera(Array) #1 /home/muslimas/public_html/lib/Varien/Db/Statement/Pdo/Mysql.php_Do_Array(110): Zene_Statement(110_) #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/tract.php/480):(Abs) Zend_Db_Statement->exekvera(Array) #4 /home/muslimas/public_html/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('VÄLJ värde FR...', Array) #5 /home/muslimas/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(504): Zend_Db_Adapter_Pdo_Abstract->query('SELECT value FR…', Array) #6 /home/muslimas/public_html/lib/Zend/Dbbs):/Aapterp/tractAdapter/Dbbs): /home/muslimas/public_html/lib/Zend/Db/Statement/Pdo.php på rad 235

    1. Du kan ha ett prefix för databastabellnamn. Skriptet använder inte den inbyggda funktionen för att få tabellnamnet, så det finns inget prefix. Försök att ersätta tabellnamnet med Mage::getSingleton('core/resource')->getTableName('catalog_product_entity_media_gallery')

  3. Fungerade perfekt, tack för att du delar med dig!
    Mycket bättre att köra än någon av modulerna erbjuder som inte riktigt kan hantera stora mängder produktbilder.

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

sv_SESvenska
Bläddra till toppen